2

我觉得我在这里错过了关于 asp.net 页面生命周期的一些非常基本的东西。

我有一个 CheckBoxList(虽然 ListBox 也会发生同样的事情)

    <asp:CheckBoxList runat="server" ID="cblCountriesAccessible" DataTextField="Text" />

我正在向它添加一堆 ListItems

        var lbData = new List<ListItem>();
        lbData.Add(new ListItem("x", "", true));
        lbData.Add(new ListItem("y", "", false));

然后将它们绑定到 CheckBoxList

    cblCountriesAccessible.DataSource = lbData;
    cblCountriesAccessible.DataBind();

并且每次列表中的项目显示为未选中(或未在 ListBox 中选择)时,如果我将 ListItems 直接添加到标记中的控件,它们会显示为选中或未选中。

    <asp:ListItem Text="x" Value="" Selected="True" />

我在选择没有执行的代码中做错了什么?我已经尝试将 CheckBoxes 绑定到 Checked 设置为 true,并且发生了同样的事情。

编辑:好的,我没有正确设置 Selected。我现在正在使用

        var lbData = new List<ListItem>();
        var l1 = new ListItem("yy", "", true) {Selected = true};
        var l2 = new ListItem("xx", "", true) {Selected = false};

        lbData.Add(l1);
        lbData.Add(l2);

而且他们仍然没有按检查加载

4

3 回答 3

4

您可以创建ListItem更改其Selected属性并添加到集合中。

ListItem li1 = new ListItem("x", "", true);
ListItem li2 = new ListItem("x", "", true); 
li1.Selected = true; 
li2.Selected = true;
cblCountriesAccessible.Items.Add(li1);
cblCountriesAccessible.Items.Add(li2);
于 2012-12-06T09:12:31.707 回答
1

ListItem.Enabled不一样ListItem.Selected。根据这个 MSDN 页面(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listitem.enabled.aspx

启用只是确定是否可以选择它。使用此重载创建项目时,它不会选择它。

根据此页面(http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.checkboxlist.aspx):“要确定 CheckBoxList 控件中的选定项目,请遍历 Items 集合并测试集合中每个项目的 Selected 属性。”

我过去使用 LINQ 完成了这项工作,方法是预先确定我的项目列表,然后遍历它们。

这是一些未经测试的代码,应该会给您一个想法。这基本上就是我对 Win Forms 做同样的事情的方式,所以你的用法可能会略有不同:

For each item in Items
    CheckedListBox.Items.Add(item.Name,Item.value,True)
Next

dim selectedItems as list(of Item) = items.where(function (x) x.selected = True)

for each item in CheckedListBox.items
    item.Selected = selectedItems.contains(item.Value)
next
于 2012-12-06T09:31:00.997 回答
0
public string GetListItems()
{
    System.Collections.Generic.List<string> items = new System.Collections.Generic.List<string>();

    foreach (ListItem item in lstfunction.Items)
    {
        if (item.Selected)
        {
            items.Add(item.Value);
        }
    }

    return String.Join(", ", items.ToArray());
}
于 2015-11-05T11:43:51.800 回答