2010-06-22 92 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的代碼將不會被命中。

相關問題