2010-06-22 55 views
1

我有一个gridview,我做了一个模板列,里面有一个复选框。 然后我想检查复选框的值。 我试图将该行的可见属性设置为false,当该行的复选框未被选中时。我总是得到null,不管我做什么。如何检查GridView中复选框的状态?

它必须与FindControl()一个问题,但我认为这是很正常的:

public partial class _Default : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 
     DbInteract dbi = new DbInteract("CONNECTION STRING"); 
     GridView1.DataSource = dbi.SqlDA("select * from table"); 
     GridView1.DataBind(); 
    } 
    protected void ProsseguirBtn_Click(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      foreach (GridViewRow row in GridView1.Rows) 
      { 
       CheckBox cb = (CheckBox)row.FindControl("chk"); 
       if (!cb.Checked) 
       { 
        GridView1.Rows[row.RowIndex].Visible = false; 
       } 
      } 
     } 
    } 
} 

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"> 
      <Columns> 
       <asp:TemplateField> 
        <EditItemTemplate> 
         <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
        </EditItemTemplate> 
        <ItemTemplate> 
         <asp:CheckBox ID="chk" runat="server" /> 
        </ItemTemplate> 
       </asp:TemplateField> 
       <asp:BoundField DataField="nome" HeaderText="jhf" /> 
      </Columns> 
     </asp:GridView> 
     <asp:Button ID="ProsseguirBtn" runat="server" Text="Button" 
      onclick="ProsseguirBtn_Click" /> 

     <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 

    </div> 
    </form> 
</body> 
</html> 

回答

0

FindControl已不是递归。换句话说,当你在你的行上调用FindControl时,它只查看行所包含的直接控件。

GridViewRow不直接包含您的控件 - 它包含表格单元格,其中包含您的控件。所以FindControl不会找到你的复选框。

如果您不知道所需的列,或者编写FindControl的递归版本,则需要使用其他方法,例如对表格单元格执行foreach循环。您可以在我的old answer here中找到有时使用的版本。

0

为什么要检查!IsPostBack

我试过这个代码,没有这个!IsPostBack检查和CheckBox被发现是正确的,否则IsPostBack是错误的,找到CheckBox的代码将不会被命中。

相关问题