在Gridview中查找复选框

时间:2018-06-11 15:19:38

标签: c# asp.net webforms

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

我在网页上显示的列表使用Gridview网格视图中的一列有一个复选框。添加一个复选框到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);

这是在网格的_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>

我还尝试直接检查单元格中的控件,但没有返回任何内容

row.Cells[36].Controls.Count

我还可以尝试或做其他任何事情来获取复选框的值。

2 个答案:

答案 0 :(得分:0)

我只是尝试了你需要的东西,这是一个可能的解决方案。

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;
        }
    }

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" />

希望这会对你有所帮助。

答案 1 :(得分:0)

我找到了解决问题的方法。

最初我在使用echo "d__Affenpinscher|c__Abyssinian|h__Kathiawari|" | grep -o -P '(?<=c__).*?(?=|)' 创建网格之后将复选框添加到gridview,无论出于何种原因,该复选框都未被检测为控件,因此_RowDataBound无效。< / p>

因此,在创建GridView而不是.FindControl()时,我将列设置为.Columns.Add("ColumnName") type bool

然后处理.Columns.Add(new DataColumn("Closed", typeof(bool)));

中的复选框属性

这样做我现在能够找到Checkbox控件使用_RowDataBound