2011-10-20 29 views
2

我有2列GridView。帶有SQL複選框字段的GridVew列

第一列是:測試標籤(模板列)

第二種:複選框(ASP:CheckBoxField字段),該CONECT與位列SQL表(完成)。

我希望在頁面加載時 - 頁面將檢查每一行,其中checkbox = true,test-label.visble將爲false。

我知道如何用SELECT語句編寫代碼來檢查SQL表中的值,但不知道如何在頁面加載時檢查gridview上的每一行。

我該怎麼辦呢?

(因爲它CheckBoxField字段,而不僅僅是「複選框,」我不能使用findcontroll的複選框。

<asp:CheckBoxField DataField="done" SortExpression="done" HeaderText="done?" /> 

所以,我能做些什麼嗎?也許,以定期CB替換場?(我不知道該怎麼辦有數據綁定 - 在常規CB)

回答

2

可以使用GridView.RowDataBound Event

所以你可以做這樣的事情

protected void GVRowDataBound(object sender, GridViewRowEventArgs e) 
     { 
      var check = (CheckBox) e.Row.FindControl("ID"); // ID is id of the checkbox 
      var lable = (Label) e.Row.FindControl("LableID"); 
      if(check != null && lable != null) 
      { 
       if(check.Checked) 
       { 
        lable.Visible = false; 
       } 
      } 
     } 
+1

+1空檢查......我仍然認爲這將是很好的檢查'e.Row.RowType'只是後人。 – pseudocoder

+0

CheckBoxField沒有id屬性。我使用:我能爲findcontrol做些什麼? – Oshrib

+0

我找到了解決方案..簡單..只是做與Eval的常規cb和你的代碼是完美的。謝謝。 – Oshrib

2

您不能在Page.Load中執行此操作,因爲GridView還沒有數據綁定。

嘗試處理GridView.RowDataBound

代碼:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     CheckBox cb = (CheckBox)e.Row.FindControl("checkbox"); 
     Label lbl = (Label)e.Row.FindControl("test-label"); 
     lbl.Visible = !(cb.Checked); 
    } 
} 
+0

CheckBoxField沒有id屬性。我正在使用: 我可以爲findcontrol做些什麼? – Oshrib