2013-04-18 39 views
2

我有幾個動態創建的複選框,現有選擇將顯示,但是當用戶進行更改時,我想將它們存儲回來。這裏是產生並動態地選擇如何保存動態複選框更改

private void Role(string role) 
{ 
    SystemUserDal dal = new SystemUserDal(); 
    var userId = Guid.Parse(Request.QueryString["ID"].ToString()); 
    var roles = dal.GetRolesList(userId); 
    foreach (KeyValuePair<Guid, string> r in roles) 
    { 
     CheckBox chk = new CheckBox(); 
     chk.ID = r.Value; 
     chk.Text = r.Value; 
     if (role.Contains(r.Value)) 
     { 
      chk.Checked = true; 
     } 
     rolepanel.Controls.Add(chk); 
    } 
} 

我想下面

private void GetCheckBoxes() 
{ 
    foreach (Control ctrl in rolepanel.Controls) 
    { 
     CheckBox c = ctrl as CheckBox; 
     string id = c.ID; 
     string role = c.Text; 
    } 
} 

當我通過代碼它擊中以計數3 foreach循環的代碼,但CTL爲空。任何線索?

+0

什麼是'rolepanel'的類型? – PoweredByOrange

+0

它的ASP面板動態複選框加載 – user2167089

+0

程序員93它的ASP面板動態複選框將加載 – user2167089

回答

4

你可能會得到錯誤,因爲rolepanel.FiondControl("chk")返回null,因爲它沒有找到ID="chk"控制。方法FindControl需要一個字符串 - 您正在查找的控件的ID。您添加的複選框沒有ID="chk",它們都從您的代碼中有ID=r.value。我建議想出一些用於ID的模式,稍後您可以使用它來查找複選框。

如果您的rolepanel只包含您動態添加的複選框,您可以使用rolepanel.Controls來獲取所有這些複選框。

不要忘記把控件投到CheckBox

所以你GetCheckBoxes()可能類似於:

private void GetCheckBoxes() 
{ 
    foreach (Control ctrl in rolepanel.Controls) 
    { 
     if (ctrl is CheckBox) 
     { 
      CheckBox c = ctrl as CheckBox; 
      string cText = c.Text; 

      // do what you need to do with cText, or checkbox c 
     } 
    } 
} 
+0

謝謝Floremin我試過這個,所以我試圖保存角色到用戶如果複選框被選中,那麼如何獲取複選框的文本選中狀態? – user2167089

+0

只需將'ctrl'轉換爲'CheckBox',然後就可以正常訪問它的所有屬性。我更新了代碼。 – Floremin

+0

謝謝Floremin。我的角色面板只包含動態複選框,但是當我嘗試上面的代碼時,它沒有進入if循環。 – user2167089

2

如果你施放它,它仍然錯誤嗎?

例如

private void GetCheckBoxes() 
{ 
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk"); 
    if(chk!= null) 

} 
+0

謝謝chris_dotnet它沒有輸入這個如果循環atall – user2167089

0

你應該投控制複選框:

private void GetCheckBoxes() 
{ 
    CheckBox chk = (CheckBox)rolepanel.FindControl("chk"); 
    if(chk!= null) 
    .... 

} 
0

另一種解決方案是創建CheckBox.CheckedChanged公開處理程序。然後,所有動態CheckBoxes CheckedChanged事件將綁定到該處理程序。使用CheckBoxList的

public void Checkbox_CheckedChanged(object sender, EventArgs e) 
{ 
    CheckBox checkBox = sender is CheckBox; 
    if(checkbox!=null) 
    { 
     //do your saving things. 
    } 
} 
+0

當複選框被選中或未選中時,事件不會升高 – user2167089

+0

google it why它不會升起。有很多關於它的信息。 – Dilshod

0

嘗試,然後做這樣的事情

 for (int i = 0; i < chkList.Items.Count; i++) 
     { 
      if (chkList.Items[i].Selected) 
      { 
       // Store Item 
      } 
     }