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

时间:2014-05-25 04:50:40

标签: 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 (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;
                }
            }
        }
    }

我已经完成了按钮点击事件,当它到达

  

if(chkRow.Checked)

显示为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”的名称不同,附加的是运行时的源图片

Source when ran

我不确定我的错误是什么

1 个答案:

答案 0 :(得分:0)

您的GridView应该包含更多列,因为您在代码中引用了Cell[2]

您可能会尝试使用row对象来查找您的控件:

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