C#中GridView中的CheckBox为啥选择后,CheckBox的Checked属性还是false?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#中GridView中的CheckBox为啥选择后,CheckBox的Checked属性还是false?相关的知识,希望对你有一定的参考价值。

protected void btnTest_Click(object sender, EventArgs e)

int intTest = 0;
for (int j = 0; j < gvTest.Rows.Count; j++)

CheckBox CB = (CheckBox)gvTest.Rows[j].FindControl("cbTest");
if (CB.Checked)

intTest = intTest + 1;
CB.Checked = true;




如上,CB.Checked一直是false
如果if (CB.Checked)

intTest = intTest + 1;
CB.Checked = true;
运行了,那CB.Checked就不是false了,这还用说

是不是页面POSTBACK时,被重新绑定了数据?

你绑定数据的代码写在哪里的?

是不是写在 Page_Load 中的,如果是,应该加上回发判断

protected void Page_Load(object sender, EventArgs e)

if( !IsPostBack )

//在这里写绑定数据代码

参考技术A 首先确定GridView 的数据邦定是否写在 IsPostBack 事件内。
再看btnTest_Click() 事件里面是否也调用了GridView 的方法 。
在就修改你的代码
if (CB.Checked)

intTest = intTest + 1;
CB.Checked = true;



改成
if (CB.Checked == false)

intTest = intTest + 1;
CB.Checked = true;


参考技术B CheckBox CB = (CheckBox)gvTest.Rows[j].FindControl("cbTest");
row估计找不到CheckBox这个控件
改成
CheckBox CB = (CheckBox)gvTest.Rows[j].Cells[索引].FindControl("cbTest"); 试试,加上是在哪个单元格
参考技术C CheckBox CB = (CheckBox)gvTest.Rows[j].FindControl("cbTest");

类型转换的对象错误改成
(CheckBox)(gvTest.Rows[j].FindControl("cbTest"))
参考技术D 打个段点调试下看if (CB.Checked)

intTest = intTest + 1;
CB.Checked = true;

有没运行啊

C# Gridview 复选框字段 AND(模板字段 + 复选框)

【中文标题】C# Gridview 复选框字段 AND(模板字段 + 复选框)【英文标题】:C# Gridview CheckBox Field VS (Template Field + CheckBox) 【发布时间】:2014-01-04 19:57:18 【问题描述】:

我有一个gridview,它从数据库中提取了一列“产品”。

这样,我需要一个checkbox 供用户在完成后对gridview 中的每个产品进行“检查”。

我研究了 CheckBox Field VS (Template Field + CheckBox) 并决定使用 (Template Field + CheckBox)gridview 保存@987654325 @。

GridView 列[0] = 产品名称 GridView 列 [1] = 复选框

在“检查”了一些checkboxes之后,用户点击提交会触发下面的事件。

string checkedBy;        
foreach (GridViewRow row in grvCheckList.Rows)

   // Im not sure how to check if each checkbox has been "checked" 
   // or not as it is in the gridview  cell.

   // what I like to have is
      if((checkbox in column[1]).checked == true)
       
        checkedBy = // Staff name 
        // my codes to store the staff name into database with respective to the product listed in             the gridview row 
       
      else
       
        checkedBy = "NULL"
        // my code to store "NULL" into database with respect to the product listed in the gridview        row
      
   

对于平时的checkbox,我平时做的如下

if(checkbox1.checked == true ) 
else if(checkbox2.checked == true )
else if(checkbox3.checked == true )
etc

所以我的问题是,尽管gridview 中的每一行都使用相同的checkbox,但我如何检查每一行中的checkbox 是否已被“检查”。

【问题讨论】:

【参考方案1】:

复选框字段: 必须绑定到数据库的一个字段并且是只读的。

模板字段中的复选框: 可以用作 rocord 选择器。

带有模板字段的示例:

ASPX:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="Id" DataSourceID="SqlDataSource1">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:CheckBox ID="CheckBox1" runat="server" />
                </ItemTemplate>
            </asp:TemplateField>
            <asp:BoundField DataField="Id" HeaderText="Id" ReadOnly="True" SortExpression="Id" />
            <asp:BoundField DataField="fname" HeaderText="fname" SortExpression="fname" />
            <asp:BoundField DataField="lname" HeaderText="lname" SortExpression="lname" />
        </Columns>
    </asp:GridView>
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" SelectCommand="SELECT * FROM [Table]"></asp:SqlDataSource>
    <asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="Button" />

后面的代码:

 protected void Button1_Click(object sender, EventArgs e)
    
        foreach (GridViewRow item in GridView1.Rows)
        
            CheckBox chk = (CheckBox)item.FindControl("CheckBox1");
            if (chk != null)
            
                if (chk.Checked)
                
                    // process selected record
                    Response.Write(item.Cells[1].Text + "<br>");
                
            
        
    

【讨论】:

以上是关于C#中GridView中的CheckBox为啥选择后,CheckBox的Checked属性还是false?的主要内容,如果未能解决你的问题,请参考以下文章

高分,在线等。C#的GridView中的CheckBox始终为灰色,不能勾选

c#中GridView中checkbox如何全选

C# Gridview 复选框字段 AND(模板字段 + 复选框)

GridView中的CheckBox如何绑定数据?

gridview中用dropdownlist更改值来筛选,更改dropdownlist之后无法进行checkbox选择

ASP.NET GridView 模板字段中的 CheckBox 在提交时不保留其值