You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何读取绑定到自动生成列GridView的布尔值

问题描述

我将Session数据绑定到自动生成列的GridView中,用于会话过期时恢复数据。GridView的代码如下:

<asp:GridView ID="GridView_SessionTable" runat="server" AutoGenerateColumns="true"/>

布尔列会被渲染为复选框,但我尝试了多种方式都无法获取这些列的值。当前用于取值的代码如下:

protected void ScanGrid(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView_SessionTable.Rows)
    {
        Test.Text = Test.Text + "ID: " + row.Cells[0].Text + "Boolean Value:" + row.Cells[4].Text;
    }
}

其他非布尔列的值都能正常获取,肯定有办法拿到布尔列的状态。查看页面源码后,发现该布尔列单元格的HTML结构为:

<span class="aspNetDisabled" title="Selectable"><input id="GridView_SessionTable_ctl00_0" type="checkbox" name="GridView_SessionTable$ctl02$ctl00" checked="checked" disabled="disabled" /></span>
解决方案

自动生成的布尔列是作为CheckBox控件渲染的,并非直接的文本内容,因此不能通过row.Cells[4].Text获取值,需要从单元格中定位到对应的CheckBox控件:

修改ScanGrid方法如下:

protected void ScanGrid(object sender, EventArgs e)
{
    foreach (GridViewRow row in GridView_SessionTable.Rows)
    {
        // 从索引为4的单元格中查找CheckBox控件
        CheckBox boolCheckBox = row.Cells[4].FindControl("ctl00") as CheckBox;
        bool isChecked = boolCheckBox != null && boolCheckBox.Checked;
        
        Test.Text += $"ID: {row.Cells[0].Text} Boolean Value: {isChecked}\n";
    }
}

补充说明

  • 自动生成的CheckBox控件ID是动态生成的(示例中为GridView_SessionTable_ctl00_0),如果通过固定后缀ctl00找不到控件,可以遍历单元格内的所有控件来定位:
// 遍历单元格控件找到CheckBox
CheckBox boolCheckBox = null;
foreach (Control ctrl in row.Cells[4].Controls)
{
    if (ctrl is CheckBox cb)
    {
        boolCheckBox = cb;
        break;
    }
}
  • 注意到复选框处于disabled状态,虽然回发时不会提交该控件的值,但直接从GridView行中获取控件状态不受此影响,只要GridView已正确绑定数据,就能拿到当前的选中状态。

内容的提问来源于stack exchange,提问作者Barnabeck

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 20:46:13