2014-06-26 35 views
-1

我已經創建了面板裏面有一個表,反過來,我已經動態地創建了複選框。動態創建複選框ID沒有找到

int RoleCount = CountRoles(); 
string[] RoleName = RoleNames(); 
CheckBox[] chk = new CheckBox[RoleCount]; 
Table TableCheckBox = new Table(); 
TablePanel.Controls.Add(TableCheckBox); 

TableRow tRow = new TableRow(); 

for (int i = 0; i < RoleCount; i++) 
{ 
    chk[i] = new CheckBox(); 
    chk[i].ID = "chk" + RoleName[i]; 
    chk[i].Text = RoleName[i]; 
    chk[i].ClientIDMode = System.Web.UI.ClientIDMode.Static; 
    TableCell tCell = new TableCell(); 
    tCell.Controls.Add(chk[i]); 
    if (i != 0 && i % 3 == 0) 
    { 
     TableCheckBox.Rows.Add(tRow); 
     tRow = new TableRow(); 
    } 
    if (i < RoleCount) 
     tRow.Cells.Add(tCell); 
     TableCheckBox.Rows.Add(tRow); 
    } 

現在,如果我想通過代碼找到這個控件,那麼它不起作用。 cb返回null。

int RoleCount = CountRoles(); 
string[] RoleName = RoleNames(); 

string chkboxbit = " "; 

try 
{ 
    foreach (string s in RoleName) 
    { 
     for (int i = RoleCount-1; i >= 0; i--) 
     { 
      chkboxbit = "chk" + RoleName[i]; 
      ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); 
      Panel panel = (Panel)cph.FindControl("TablePanel"); 
      System.Web.UI.HtmlControls.HtmlTable table = (System.Web.UI.HtmlControls.HtmlTable)panel.FindControl("TableCheckBox"); 
      System.Web.UI.HtmlControls.HtmlInputCheckBox cb = (System.Web.UI.HtmlControls.HtmlInputCheckBox)table.FindControl(chkboxbit); 
      if (cb != null) 
       cb.Checked= false; 
     } 
    } 
} 
catch 
{ 
    Response.Redirect("Error.aspx"); 
} 

我該怎麼辦?

+0

你必須(重新)在每個回傳中創建所有動態創建的控件,最晚在'Page_Load'中創建,並且具有與以前相同的ID。所有對象都放置在頁面生命週期的末尾。所以你只需要堅持信息已經創建了多少控件。我不知道'CountRoles()'如何得到數字,你可以使用'Session'或'ViewState'。 –

+0

嘿蒂姆! cb仍然返回null。 – Mayank

+0

你使用過調試器嗎?代碼有點混亂。爲什麼你有'if(我

回答

0

完成了。 由於我創建CheckBox類型,因此下面的代碼適合它,我認爲是因爲我的代碼正常運行。

ContentPlaceHolder cph = (ContentPlaceHolder)this.Master.FindControl("ContentPlaceHolder1"); 
Panel panel = (Panel)cph.FindControl("TablePanel"); 
System.Web.UI.HtmlControls.HtmlTable table = (System.Web.UI.HtmlControls.HtmlTable)panel.FindControl("TableCheckBox"); 
System.Web.UI.WebControls.CheckBox cb = (System.Web.UI.WebControls.CheckBox)table.FindControl(chkboxbit); 
if (cb != null) 
{ 
    if (cb.Checked == true) 
    cb.Checked = false; 
}