C# 在gridview中选中复选框时如何获取行值

C# 在gridview中选中复选框时如何获取行值,c#,asp.net,gridview,checkbox,C#,Asp.net,Gridview,Checkbox,在我问这个问题之前,我做了一些检查,以确保这不是一个重复,以及如何从模板字段中有复选框的行中获取行值…但我似乎无法让它工作…到目前为止,我已经尝试过了 protected void Page_Load(object sender, EventArgs e) { Entities NW = new Entities(); var customers = from c in NW.Customers where

在我问这个问题之前,我做了一些检查,以确保这不是一个重复,以及如何从模板字段中有复选框的行中获取行值…但我似乎无法让它工作…到目前为止,我已经尝试过了

protected void Page_Load(object sender, EventArgs e)
    {
        Entities NW = new Entities();

        var customers =
            from c in NW.Customers
            where (c.ContactName.StartsWith("Ma") || c.ContactName.StartsWith("An")
            || c.ContactName.StartsWith("T")
            || c.ContactName.StartsWith("V")
            )
            orderby c.ContactName ascending
            select new
            {
                c.CustomerID,
                c.ContactName,
                c.CompanyName,
                c.City
            };

        gv1.DataSource = customers.ToList();
        gv1.DataBind();
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow row in gv1.Rows)
        {
            if (row.RowType == DataControlRowType.DataRow)
            {
                CheckBox chkRow = (row.Cells[0].FindControl("CB") as CheckBox);
                if (chkRow.Checked)
                {
                    Label1.Text = row.Cells[2].Text;
                }
            }
        }
    }
我已经完成了按钮点击事件,当它到达

如果(已勾选)

它显示为null并跳过它

我的标记是

<asp:GridView ID="gv1" runat="server">
            <HeaderStyle BackColor="SkyBlue" />
            <AlternatingRowStyle BackColor="Yellow" />
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <asp:CheckBox ID="CB" runat="server" />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

当我在运行后查看源代码时,复选框的名称都与我给它们的ID“CB”不同,所附的是源代码运行时的图片


我不确定我在这方面做错了什么

您的
GridView
应该有更多的列,因为您在代码中引用了
单元格[2]

您可以尝试使用
对象查找控件:

CheckBox chkRow = (row.FindControl("CB") as CheckBox);

在看了你的答案后,我切碎了一些代码,去掉了if语句,并更改了我的复选框以匹配你的,它工作得非常好。实际上,我认为它工作得很好,但它只是抓住它找到的任何控件并填充标签。你说的“任何控件”是什么意思?在一行中是否有多个名为“CB”的控件?否,发生的是,它转到gridview中的最后一行,并从第二个单元格中选择值。不管我是否检查复选框,当我将if语句添加到后面查看它是否被选中时,它只会在你提供的代码中完成的StimeMeNF完成,而不是你应该考虑使用<代码>页> ISPrStuts<代码> >在你的代码> Page加载()/<代码>事件处理程序中,因为每次加载页面时都会重置绑定,因此会将所有复选框呈现为false。如果我这样做了,它在我这方面是有效的(我刚刚将您的代码复制到我的VS中的一个新ASP.NET应用程序中)。