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应用程序中)。