2011-10-11 63 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返回正确的数据(可能需要通过重载)。