2

ここで、asp.netページのライフサイクルについて本当に基本的なものが欠けているように感じます。

私はCheckBoxListを持っています(同じことがListBoxでも起こりますが)

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

たくさんのListItemを追加しています

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

次に、それらをCheckBoxListにバインドします

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

また、リスト内のアイテムがチェックされていない(またはリストボックスで選択されていない)状態で表示されるたびに、リストアイテムをマークアップのコントロールに直接追加すると、選択済みまたは未選択として問題なく表示されます。

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

選択したコードが実行されない場合、何が間違っていますか?Checkedをtrueに設定してCheckBoxをバインドしようとしましたが、同じことが起こります。

編集:OK、選択を正しく設定していませんでした。私は今使っています

        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を使用して、アイテムのリストを事前に決定し、それらを反復処理することでこれを実行しました。

これがあなたにアイデアを与えるはずのいくつかのテストされていないコードです。これは基本的に私がWinFormsでこれと同じことをした方法であるため、使用法は少し異なる場合があります。

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 に答える