Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Gridview中查找复选框_C#_Asp.net_Webforms - Fatal编程技术网

C# 在Gridview中查找复选框

C# 在Gridview中查找复选框,c#,asp.net,webforms,C#,Asp.net,Webforms,我希望有人能帮助我解决我的WebForms问题 我使用Gridview在网页上显示了一个列表,grid视图中的一列有一个复选框。在gridview中添加复选框不是我做过的问题,我的问题是我无法读取复选框是否被选中。当逐行循环通过网格时,我在中指定带有复选框的单元格,它返回的是 下面是我用来插入复选框的代码示例 CheckBox chk = new CheckBox(); chk.EnableViewState = true; ch

我希望有人能帮助我解决我的WebForms问题

我使用
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