2013-04-10 77 views
0

我生成複選框動態,最初2個查詢r匹配如果兩個查詢的o/p匹配,那麼在這種情況下,特定的複選框被檢查和禁用... ..........但在我的情況下,相應的鄰匹配匹配複選框/查詢的對殘疾人得到,但它並沒有得到遏制動態複選框沒有得到檢查在asp.net通過C#

protected void Page_Load(object sender, EventArgs e) 
{ 
      DataSet ds = c.readDataSet("select teacher_id, name from teacher"); 
      DataTable dt = ds.Tables[0]; 
      foreach (DataRow drow in dt.Rows) 
      { 
        chk = new CheckBox(); 
        chk.ID = "chk_" + drow[0].ToString(); 

        SqlDataReader dr = c.readData("select t.teacher_id from teacher t join coordinator c on t.teacher_id=c.teacher_id where c.branch='" + ddl_class.Text + "' and c.cyear=" + DateTime.Now.ToString("yyyy")+" and c.status=2"); 
        while (dr.Read()) 
        { 
         if(dr.GetString(0)==drow[0].ToString()) 
         { 
          chk.Checked = true; 
          chk.Enabled = false; 
          count = 1; 
         } 
        } 

        dr.Close(); 

        chk.ToolTip = drow[1].ToString(); 
        lb = new Label(); 
        lb.Text = drow[1].ToString(); 
        PnlCtrl.Controls.Add(chk); 
        PnlCtrl.Controls.Add(lb); 
        PnlCtrl.Controls.Add(new LiteralControl("<br/>")); 
      } 

} 
+0

嘗試創建環路內全新的CheckBox處理程序:'複選框CHK =新的複選框()'(而不是地方使用聲明外)。 – Aristos 2013-04-10 19:59:01

+0

@Aristos,看看我的回答,並告訴我你的想法。我非常肯定,這只是因爲.NET Framework忽略了控件,因爲它是'啓用'狀態。 – 2013-04-10 20:00:25

+0

@MichaelPerrenoud是的,你的答案看起來更健壯。 – Aristos 2013-04-10 20:01:23

回答

0

好了,這種情況正在發生,因爲OnPreRender的當Enabled設置爲false時,CheckBox控件忽略它:

protected internal override void OnPreRender(EventArgs e) 
{ 
    base.OnPreRender(e); 
    bool autoPostBack = this.AutoPostBack; 
    if (this.Page != null && base.IsEnabled) 
    { 
     this.Page.RegisterRequiresPostBack(this); 
     if (autoPostBack) 
     { 
      this.Page.RegisterPostBackScript(); 
      this.Page.RegisterFocusScript(); 
      if (this.CausesValidation && this.Page.GetValidators(this.ValidationGroup).Count > 0) 
      { 
       this.Page.RegisterWebFormsScript(); 
      } 
     } 
    } 
    if (!this.SaveCheckedViewState(autoPostBack)) 
    { 
     this.ViewState.SetItemDirty("Checked", false); 
     if (this.Page != null && base.IsEnabled) 
     { 
      this.Page.RegisterEnabledControl(this); 
     } 
    } 
} 

這真的不是那麼令人驚訝。因此,而不是設置Checked = true做到這一點:

chk.Attributes.Add("checked", "checked");