【问题标题】:Getting rowID value for a "checked" checkbox in GridView in ASP.Net在 ASP.Net 的 GridView 中获取“选中”复选框的 rowID 值
【发布时间】:2011-03-02 16:12:25
【问题描述】:

我在 GridView 中使用复选框。如果选中了复选框,我需要确定第二列单元格中的值。

我正在使用 C# 2008 和 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();
                }
            }

    }

【问题讨论】:

  • 请澄清:“如果已选中相关行复选框,我需要确定第二列单元格中的值。”您是否在不同行的同一列中有两个复选框,并且您想比较它们的选中状态?你什么时候/在哪里比较这个?
  • 不,该行只有一个复选框;
  • 当你为你的问题提供额外的信息时,你最好编辑你的原始问题并将它们添加到那里而不是评论它。您在哪里需要值和复选框的选中状态?或许你应该提供一些源代码。

标签: c# asp.net .net-3.5 gridview


【解决方案1】:

为了避免通过索引访问 GridView 的单元格,另一种方法是在设计器中将所需的 BoundField 转换为 TemplateField。然后使用 FindControl 方法获取该单元格中的文本值。默认情况下,设计器将为新 TemplateField 的 Label 控件命名,如“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;

然而,我认为更好的方法是利用 GridView 控件的 DataKeys 功能。第一步是设置 GridView 的 DataKeyNames 属性:

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

然后,假设您的 PurchaseOrderID 列是 int 类型,您可以将同一行更改为:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-01-16
    • 2012-03-06
    • 2020-12-23
    • 2018-06-15
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多