Getting rowID value for checked flag in GridView in ASP.Net

I use checkboxes in a gridview. I need to define a value in a cell in the second column if the checkbox is checked.

I am using C # 2008 and ASP.net

                    <asp:GridView ID="gvOrders" runat="server" AutoGenerateColumns="False" CellPadding="4" GridLines="None" Width="100%" AllowPaging="True" PageSize="20" 
                    onpageindexchanging="gvOrders_PageIndexChanging" ForeColor="#333333">
                    <Columns>
                        <asp:TemplateField HeaderText="VerifiedComplete" >
                            <ItemTemplate>
                                <asp:CheckBox ID="cbPOID" runat="server"/>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:BoundField DataField="PurchaseOrderID" HeaderText="PurchaseOrderID" HtmlEncode="False" ></asp:BoundField>
                        <asp:BoundField DataField="VENDOR_ID" HeaderText="Vendor ID"></asp:BoundField>
                        <asp:BoundField DataField="VENDOR_NAME" HeaderText="Vendor Name"></asp:BoundField>
                        <asp:BoundField DataField="ITEM_DESC" HeaderText="Item Desc"></asp:BoundField>
                        <asp:BoundField DataField="SYS_DATE" HeaderText="System Date"></asp:BoundField>
                    </Columns>
                    <FooterStyle CssClass="GridFooter" BackColor="#990000" Font-Bold="True" ForeColor="White" />
                    <PagerStyle CssClass="GridPager" ForeColor="#333333" BackColor="#FFCC66" HorizontalAlign="Center" />
                    <SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
                    <HeaderStyle CssClass="GridHeader" BackColor="#990000" Font-Bold="True" ForeColor="White"  />
                    <RowStyle CssClass="GridItem" BackColor="#FFFBD6" ForeColor="#333333" />
                    <AlternatingRowStyle  CssClass="GridAltItem" BackColor="White" />
                </asp:GridView>





        protected void btnDisable_Click(object sender, EventArgs e)
    {
            foreach (GridViewRow gvr in gvOrders.Rows)
            {

                if (((CheckBox)gvr.FindControl("cbPOID")).Checked == true)
                {
                    string strPrimaryid = gvr.Cells[2].ToString();
                }
            }

    }
+3
source share
1 answer

Another way to do this in order to avoid accessing GridView cells by index is to convert the desired BoundField to TemplateField in the constructor. Then use the FindControl method to get the text value in this cell. By default, the designer will provide the Label control with a new TemplateField name of type "Label1".

, , . , aspx , :

<asp:BoundField DataField="PurchaseOrderID" ...</asp:BoundField>

<asp:TemplateField HeaderText="PurchaseOrderID">
 <ItemTemplate>
  <asp:Label ID="Label1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:Label>
 </ItemTemplate>
 <EditItemTemplate>
  <asp:TextBox ID="TextBox1" runat="server" Text='<%# Bind("PurchaseOrderID") %>'></asp:TextBox>
 </EditItemTemplate>
</asp:TemplateField>

:

string strPrimaryid = gvr.FindControl("Label1").Text;

, , - DataKeys GridView. DataKeyNames GridView:

<asp:GridView ID="gvOrders" runat="server" DataKeyNames="PurchaseOrderID" ...>

, PurchaseOrderID int, :

int primaryid = (int)gvOrders.DataKeys[gvr.RowIndex].Value;
+2

Source: https://habr.com/ru/post/1749589/


All Articles