2012-01-11 24 views
0

我有一個GridView, 沒有使用SelectedIndexChanged,我怎樣才能檢索每行從GridView每行的值單擊每行中的每個按鈕?如果不使用SelectedIndexChanged,如何從gridview檢索每一行的值?

這是我的aspx代碼

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ProductID" 
     DataSourceID="SqlDataSource1" ShowHeader="False" AllowPaging="True" BorderColor="White" 
     CellPadding="6" GridLines="None" Height="100px" Width="800px"> 
     <Columns> 
      <asp:TemplateField> 
       <ItemTemplate> 
        Card Name: 
        <asp:Label ID="Label1" runat="server" Text='<%# Bind("Name") %>'></asp:Label> 
        <br /> 
        Cost : 
        <asp:Label ID="Label2" runat="server" Text='<%# Bind("Price") %>'></asp:Label> 
        <br /> 
        <asp:Label ID="Label3" runat="server" Text='<%# Bind("ProductImgID") %>'></asp:Label> 
        <asp:Image ID="Image3" runat="server" ImageUrl='<%# Eval("ProductImgUrl", "images/{0}") %>' /> 
        <br /> 
        <asp:Button ID="btnAddProduct" runat="server" Text="Add" /> 
        <br /> 
       </ItemTemplate> 
      </asp:TemplateField> 
     </Columns> 
    </asp:GridView> 

回答

2

一個選擇可以是綁定的的CommandArgument按鈕轉到ProductID

<asp:Button ID="btnAddProduct" runat="server" Text="Add" CommandArgument='<%#Bind("ProductID")%>' /> 

然後在RowCommand事件檢索的ProductID,然後使用ID從數據庫中檢索該行從數據庫

string prodID=(string)e.CommandArgument() 

提取的行。

0

爲了得到一個行值,你必須讓行參考,讓該行就可以輕鬆到達指定的列,並能得到數值後

讓我們考慮你在模板字段列中有一個「鏈接按鈕控件」。對於gridview,你必須設置Row Command Event,並且在列的編輯模板中設置鏈接按鈕的命令名稱,也可以稱爲「lnkTest」

在RowCommand事件中,必須包含以下代碼段

if(e.CommandName.Equals("lnkTest")) // Checks that link button was clicked 

    { 
    GridViewRow grdRow = (((LinkButton)e.CommandSource).Container) 

// This Will give you the reference of the Row in which the link button was clicked 

    int grdRowIndex = grdRow.RowIndex; 

//This will give you the index of the row 

    var uniqueDataKeyValue = GridView1.DataKeys[grdRowIndex].Value; 

//這會給你的DataKey價值,鏈接控制是點擊

希望行以上代碼將有助於

0

添加CommandArgument='<%# Container.DataItemIndex %>'到您的添加按鈕

<asp:Button ID="btnAddProduct" runat="server" Text="Add" CommandArgument='<%# Container.DataItemIndex %>'/> 

以檢索Name,在gridview行命令使用此代碼

Dim gvr As GridViewRow = grvGRNCONs.Rows(e.CommandArgument) 
Dim name As String = DirectCast(gvr.FindControl("Label1"), Label).Text 

等..

0
 <asp:GridView ID="grdResults" CssClass="CommonTable dataTable" AutoGenerateColumns="false" runat="server"> 
                <Columns> 
            <asp:TemplateField HeaderText="Sl#"> 
             <ItemTemplate> 
              <asp:Label ID="lblSlno" Text='<%# Container.DataItemIndex+1 %>' runat="server"></asp:Label> 
             </ItemTemplate> 
            </asp:TemplateField> 

            <asp:TemplateField HeaderText="" ControlStyle-Height="15px" ControlStyle-Width="15px"> 
             <HeaderStyle HorizontalAlign="Left" /> 
             <ItemStyle HorizontalAlign="Left" CssClass="PInfoTd" /> 
             <ItemTemplate> 
              <asp:ImageButton ID="lknassesno" ToolTip="Edit Assessment" Width="50" CssClass="NewButton" ***CommandName="LINK"*** 
               runat="server" ImageUrl="~/img/Edit.png" /> 
              <asp:HiddenField ID="hidassesmentno" Value='<%# EVAL("PAN_CODE")%>' runat="server" /> 
              <asp:HiddenField ID="hidPendStatus" Value='<%# EVAL("Pstatus")%>' runat="server" /> 
              <asp:HiddenField ID="hidIPNO"Value='<%#EVAL("IP_NO")%>' runat="server" /> 

             </ItemTemplate> 
            </asp:TemplateField> 
           </Columns> 
          </asp:GridView> 



**code behind** 
    Protected Sub grdResults_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdResults.RowCommand 
      If **e.CommandName = "LINK"** Then 
       Dim ctrl As Control = e.CommandSource 
       Dim grrow As GridViewRow = ctrl.Parent.NamingContainer 
       'Dim i As Integer = Convert.ToInt16(e.CommandArgument) 
       'Dim lknassesno As HiddenField = DirectCast(e.CommandSource, ImageButton) 
       Dim hidAssesmentNo As HiddenField = DirectCast(grdResults.Rows(grrow.RowIndex).FindControl("hidassesmentno"), HiddenField) 
       Dim lblstatus As HiddenField = DirectCast(grdResults.Rows(grrow.RowIndex).FindControl("hidPendStatus"), HiddenField) 
       Dim hidIpNo As HiddenField = DirectCast(grdResults.Rows(grrow.RowIndex).FindControl("hidIPNO"), HiddenField) 
       Dim Assno As String = hidAssesmentNo.Value 
       Dim Ipno As String = hidIpNo.Value 
       Dim st As String = "" 
       If lblstatus.Value = "Pending" Then 
        st = "E"`enter code here` 
       ElseIf lblstatus.Value = "Completed" Then 
        st = "V" 
       End If 
       Response.Redirect("Assessment.aspx?PAssNo=" & Assno & "&Mode=" & st & "&IPNO=" & Ipno & "") 
      End If 
     End Sub 
相關問題