C#CheckBoxList Foreach项目未更新

时间:2011-10-11 13:51:49

标签: c# asp.net webforms

我有一个复选框列表,没有通过它循环更新。

<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";}

复选框列表中的数据根本没有更新,即使逐步调试器似乎按预期工作。它确实在调用数据的函数中按预期显示列表。仅供参考,这是在(!isPostBack)检查内部,因此它不再重新绑定它。我很难过为什么这不起作用。

3 个答案:

答案 0 :(得分:1)

我最好的猜测,如果调试器告诉你它正在做正确的事情,那么在此之后的某个时刻页面正在调用它的DataBind()方法。这将在包括此控件在内的所有子项上调用DataBind。然后,这将从数据源重新绑定,丢失您的更改。

正如其他人所说,你可能想要更改你的数据绑定列表,而不是列表本身。更改循环以循环遍历listRoles,然后在此之后进行数据绑定,或者使AdminRole.GetRolesList返回正确的数据(如果需要,可能通过重载)。

答案 1 :(得分:1)

那篇文字&amp;我爱的价值!但似乎你正在重新分配价值观?你确实绑定了它。

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

答案 2 :(得分:-2)

在foreach之后做数据绑定.-

Davide Piras也有一个观点,但也许这只是你想要做的一个例子。