C# 在Gridview中查找复选框
我希望有人能帮助我解决我的WebForms问题 我使用C# 在Gridview中查找复选框,c#,asp.net,webforms,C#,Asp.net,Webforms,我希望有人能帮助我解决我的WebForms问题 我使用Gridview在网页上显示了一个列表,grid视图中的一列有一个复选框。在gridview中添加复选框不是我做过的问题,我的问题是我无法读取复选框是否被选中。当逐行循环通过网格时,我在中指定带有复选框的单元格,它返回的是 下面是我用来插入复选框的代码示例 CheckBox chk = new CheckBox(); chk.EnableViewState = true; ch
Gridview
在网页上显示了一个列表,grid视图中的一列有一个复选框。在gridview中添加复选框不是我做过的问题,我的问题是我无法读取复选框是否被选中。当逐行循环通过网格时,我在中指定带有复选框的单元格,它返回的是
下面是我用来插入复选框的代码示例
CheckBox chk = new CheckBox();
chk.EnableViewState = true;
chk.Enabled = true;
chk.Checked = true;
chk.ID = "chkb";
e.Row.Cells[DATA_TABLE_GRID_VIEW_COLUMN_CLOSE].Controls.Add(chk);
这是在网格的\u RowDataBound
方法中完成的(如果有区别的话)
我尝试了几种不同的方法来获取价值,但都没有提供我想要的结果
foreach (GridViewRow row in theGrid.Rows)
{
var val = (CheckBox)row.FindControl("ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder1_GridViewMeter_ctl03_chkb");
}
在本例中,为了测试,我硬编码了一个ID,首先检查该ID是否存在于页面上。
下面是为网格视图生成的HTML示例
<td>
<span>
<input id="ctl00_ctl00_MainContentPlaceHolder_ContentPlaceHolder1_GridViewMeter_ctl03_chkb" type="checkbox" name="ctl00$ctl00$MainContentPlaceHolder$ContentPlaceHolder1$GridViewMeter$ctl03$chkb" checked="checked">
</span>
是否还有其他方法可以尝试或执行以获取复选框的值。我只是尝试了您需要的内容,这里是一个可能的解决方案
CheckBox chk = new CheckBox();
chk.EnableViewState = true;
chk.Enabled = true;
chk.Checked = true;
chk.ID = "chkb";
e.Row.Cells[DATA_TABLE_GRID_VIEW_COLUMN_CLOSE].Controls.Add(chk);
protected void Page_Load(object sender, EventArgs e)
{
List<Student> lista = new List<Student>();
lista.Add(new Student() { Id = 1, Name = "Nesta" });
lista.Add(new Student() { Id = 2, Name = "Pirlo" });
lista.Add(new Student() { Id = 3, Name = "Maldini" });
GridTest.DataSource = lista;
GridTest.DataBind();
}
protected void GridTest_RowDataBound(object sender, GridViewRowEventArgs e)
{
CheckBox chk = new CheckBox();
chk.EnableViewState = true;
chk.Enabled = true;
chk.Checked = true;
chk.Text = "Test";
chk.ID = "chkb";
e.Row.Cells[0].Controls.Add(chk);
}
protected void ClickIt_Click(object sender, EventArgs e)
{
foreach (GridViewRow row in GridTest.Rows)
{
var val = (CheckBox)row.FindControl("chkb");
var name = val.Text;
var boolvalue = val.Checked;
}
}
受保护的无效页面加载(对象发送方,事件参数e)
{
List lista=新列表();
Add(new Student(){Id=1,Name=“Nesta”});
Add(newstudent(){Id=2,Name=“Pirlo”});
Add(newstudent(){Id=3,Name=“Maldini”});
GridTest.DataSource=lista;
GridTest.DataBind();
}
受保护的void GridTest_RowDataBound(对象发送方,GridViewRowEventArgs e)
{
复选框chk=新复选框();
chk.EnableViewState=true;
chk.Enabled=true;
chk.Checked=真;
chk.Text=“测试”;
chk.ID=“chkb”;
e、 行。单元格[0]。控件。添加(chk);
}
受保护的void ClickIt\u Click(对象发送者,事件参数e)
{
foreach(GridTest.Rows中的GridViewRow行)
{
var val=(复选框)row.FindControl(“chkb”);
变量名称=变量文本;
var布尔值=选中的val;
}
}
HTML方面很简单:
<asp:GridView ID="GridTest" runat="server" OnRowDataBound="GridTest_RowDataBound" >
<Columns>
</Columns></asp:GridView><asp:Button ID="ClickIt" runat="server" Text="Press" OnClick="ClickIt_Click" />
希望这对您有所帮助。我找到了解决问题的方法。 最初,我是在使用
\u RowDataBound
创建网格后,将复选框添加到gridview中的,无论出于何种原因,该复选框未被检测为控件,因此.FindControl()
不起作用
因此,在创建GridView而不是.Columns.Add(“ColumnName”)
时,我将列设置为类型bool
.Columns.Add(新数据列(“Closed”,typeof(bool))代码>
然后处理行数据绑定中的复选框属性
通过这种方式,我现在可以找到复选框控件使用.FindControl()
您不应该使用生成的Id。请使用您在代码“chkb”中添加的Id。但奇怪的是,你在单元格上找不到它,你确定它是正确的单元格吗?谢谢你的回答,我不完全理解GridView,但它为行中的每个单元格提供了一个唯一的id,并将我设置的id附加到最后。此外,我已经检查并再次检查了它是否正确。这看起来很棒,再加上看它,它应该可以工作,但是无论出于何种原因,这与我正在使用的代码不起作用:(@Richard,那么你可以添加更多的代码吗。可能有什么东西在加载时覆盖了它。在什么情况下,是你的foreach