選択したアイテムを取得したいときはいつでも、各アイテムをループして、それが選択されているかどうかを確認する必要があります。CheckBoxListでは奇妙に見えるSelectedItem(最後に「s」がない)メンバーもあります。持っているのは論理的なことのようですが、なぜ追加しなかったのか誰か知っていますか?
4 に答える
CheckBoxListではなく、CheckBoxListが継承するListControlでSelectedItemを実装しているためです。CheckBoxListの記述方法の多くは「正しく」ないだけでなく、主観的な議論であるため、CheckBoxListをソースに戻す必要があると主張することができます。(これは個人的な暴言の主題です。CheckBoxListが無愛想に何かをしているケースが多すぎて、それが面倒です。すべてです。私の心の働きとは違うと思いますが、他の人にそれを裏付けることはありません。彼らにも迷惑をかけます。)
ダスティンのendrachensternの答えに加えて。あなたはあなた自身を転がすことができます:-)
public static IEnumerable<ListItem> SelectedItems(this CheckBoxList cbl)
{
return cbl.Items.Cast<ListItem>().Where(l=>l.Selected == true);
}
チェックボックスリストはラジオボタンのようにグループ化できない個々のHTMLチェックボックスをレンダリングするため、選択したプロパティをアイテムごとに評価する必要があると言わざるを得ません。
これはドキュメントの一部です。また、はインデックスが最も低いSelectedIndex
アイテムを返すことに注意してください。
CheckBoxListコントロールは、データバインディングを使用して動的に生成できる複数選択チェックボックスグループを提供します。これには、リスト内の個々のアイテムに対応するメンバーを含むItemsコレクションが含まれています。チェックされているアイテムを判別するには、コレクションを繰り返し処理し、リスト内の各アイテムのSelectedプロパティをテストします。
また、CheckBoxListをサブクラス化し、この機能を自分で実装して、再利用することも非常に簡単です。
public class ExtendedCheckBoxList : CheckBoxList
{
public List<string> SelectedItems
{
get
{
return (from ListItem item in Items
where item.Selected
select item.Value).ToList();
}
}
}