2011-10-11 51 views
0

我有一個複選框列表,在循環中沒有更新。C#CheckBoxList Foreach項目沒有更新

<asp:CheckBoxList ID="cblRoles" runat="server"> 
           </asp:CheckBoxList> 

漂亮的直線前進,後面的代碼:

List<ListItem> listRoles = AdminRole.GetRolesList(false); 


    cblRoles.DataSource = listRoles; 
    cblRoles.DataValueField = "Value"; 
    cblRoles.DataTextField = "Text"; 
    cblRoles.DataBind(); 
    foreach (ListItem listItemRoles in cblRoles.Items) 
    { 
     listItemRoles.Enabled = true; 
     listItemRoles.Selected = true; 
     listItemRoles.Text = "test"; 
     listItemRoles.Value = "test";} 

複選框列表內的數據沒有更新可言,即使stepthrough調試器似乎按預期方式工作。它確實在調用數據的函數中按預期顯示了列表。僅供參考,這是(!isPostBack)檢查,以便它不重新重新綁定它。我難以理解爲什麼這不起作用。

+0

如果您的項目來自listRoles列表並且您綁定到DataSource模式,那麼使用foreach手動更新有什麼意義? –

+2

我編輯了您的問題,但請注意潛在的冒犯性語言。 –

+2

什麼事件負責調用這段代碼? –

回答

1

那個文字&值我愛!但似乎你正在重新賦值?你確實已經綁定了它。

foreach (ListItem listItemRoles in cblRoles.Items) 
{ 
    listItemRoles.Selected = true; 
} 
-2

執行後的數據綁定的foreach.-

達維德Piras酒店也有一個點,但也許這只是你想要做什麼的例子。

+3

如果集合中沒有任何東西可以用來做什麼工作,那麼他的foreach會起什麼作用呢? – KreepN

+0

也許他沒有展示他想做的事情的完整代碼。 – apacay

+0

不,問題是如果他通過該foreach在集合上運行任何代碼,如果那裏沒有任何項目,那麼代碼沒有做任何事情。 – KreepN

1

我最好的猜測是,如果調試器告訴你它正在做正確的事情,那麼在此之後的某個時刻,頁面將調用其方法DataBind()。這將調用包含此控件的所有孩子的DataBind。然後這將從數據源重新綁定,失去您的更改。

正如其他人所說,你可能想改變你的數據綁定列表,而不是列表本身。或者更改循環以循環訪問listRoles,然後更改數據綁定,或者讓AdminRole.GetRolesList返回正確的數據(可能需要通過重載)。