web-dev-qa-db-ja.com

CheckBoxListアイテムの値を取得する

データを入力しているCheckBoxListがあります。リストからチェックされたアイテムを取得しようとすると、アイテムの序数しか取得できず、値を取得できません。

Items [i] .Valueを使用できることを読みましたが、これを実行しようとすると、拡張メソッド 'value'がないことを示すエラーが表示されます。

情報を取得しようとするために使用しているコードは次のとおりです(GetItemText(i)は実際にはアイテムのテキストではなく、アイテムの位置のみを提供します)

   private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
        if (chBoxListTables.GetItemChecked(i))
        {
            string str = chBoxListTables.GetItemText(i);
            MessageBox.Show(str);

            //next line invalid extension method
            chBoxListTables.Items[i].value;
        }
    }
}

これは.Net 4.0を使用しています

どんな考えでも感謝します...ありがとう

10
Nic

これは非常に簡単になりました。 chBoxListTables.Item [i]は文字列値であり、明示的な変換により、変数にロードできるようになりました。次のコードが機能します。

private void btnGO_Click(object sender, EventArgs e)
{
    for (int i = 0; i < chBoxListTables.Items.Count; i++)
    {
          if (chBoxListTables.GetItemChecked(i))
        {
            string str = (string)chBoxListTables.Items[i];
            MessageBox.Show(str);
        }
    }
}
15
Nic

これを使ってみてください。

        for (int i = 0; i < chBoxListTables.Items.Count; i++)
        {
            if (chBoxListTables.Items[i].Selected)
            {
                string str = chBoxListTables.Items[i].Text;
                MessageBox.Show(str);

                var itemValue = chBoxListTables.Items[i].Value;
            }
        }

「V」は、CAPS in Valueにある必要があります。

WinFormアプリで使用され、適切に実行される別のコード例を次に示します。

        var chBoxList= new CheckedListBox();
        chBoxList.Items.Add(new ListItem("One", "1"));
        chBoxList.Items.Add(new ListItem("Two", "2"));
        chBoxList.SetItemChecked(1, true);

        var checkedItems = chBoxList.CheckedItems;
        var chkText = ((ListItem)checkedItems[0]).Text;
        var chkValue = ((ListItem)checkedItems[0]).Value;
        MessageBox.Show(chkText);
        MessageBox.Show(chkValue);
4
Nitesh

アイテムをチェックするには、CheckedItemsまたはGetItemsCheckedを使用できます。私は.NET 4.5で以下のコードを試しました

CheckedItemsコレクションを反復処理します。これにより、リスト全体ではなく、チェックされたアイテムのリスト内のアイテム番号が表示されます。そのため、リストの最初の項目がチェックされず、2番目の項目がチェックされる場合、以下のコードはChecked Item 1 = MyListItem2のようなテキストを表示します。

//Determine if there are any items checked. 
if(chBoxListTables.CheckedItems.Count != 0)  
{
    //looped through all checked items and show results.
    string s = "";
    for (int x = 0; x < chBoxListTables.CheckedItems.Count; x++)
    {
        s = s + (x + 1).ToString() + " = " + chBoxListTables.CheckedItems[x].ToString()+ ", ";
    }
    MessageBox.Show(s);//show result
}

-OR-

Itemsコレクションをステップ実行し、各アイテムに対してGetItemCheckedメソッドを呼び出します。これにより、リスト全体のアイテム番号が得られるため、リストの最初のアイテムがチェックされず、2番目のアイテムがチェックされると、Item 2 = MyListItem2のようなものが表示されます。

int i;  
string s;   
s = "Checked items:\n" ;  
for (i = 0; i < checkedListBox1.Items.Count; i++)  
{  
   if (checkedListBox1.GetItemChecked(i))  
   {  
      s = s + "Item " + (i+1).ToString() + " = " + checkedListBox1.Items[i].ToString() + "\n";  
   }  
}  
MessageBox.Show (s);

お役に立てれば...

2
Rohan Khude

これを試すことができます:-

string values = "";
foreach(ListItem item in myCBL.Items){
if(item.Selected)
{
values += item.Value.ToString() + ",";  
}
}
values = values.TrimEnd(',');  //To eliminate comma in last.
1
spacemonkey

//簡単なサンプルコード:

foreach (var item in YourCheckedListBox.CheckedItems)
{List<string>.Add(item);}
1
Santos

これの代わりに:

CheckboxList1.Items[i].value;

これを試して:

CheckboxList1.Items[i].ToString();

それは私のために働いた:)

0
tango

文字列のリストを初期化し、選択されたアイテムを追加できます。

コードを確認してください、私のために正常に動作します。

List<string> modules = new List<string>();

foreach(ListItem s in chk_modules.Items)
{
    if (s.Selected)
    {
         modules.Add(s.Value);
    }
}
0
Faisal Ansari

これを使用してみてください:

 private void button1_Click(object sender, EventArgs e)
    {

        for (int i = 0; i < chBoxListTables.Items.Count; i++)
            if (chBoxListTables.GetItemCheckState(i) == CheckState.Checked)
            {
               txtBx.text += chBoxListTables.Items[i].ToString() + " \n"; 

            }
    }
0
Ahmed El-Hansy