2011-02-02 11 views
20

私はC#で私のWinFormよりもCheckedListBoxを使用しています。私がチェックされた項目のインデックスを取得することができますCheckedListBoxからチェック項目の値を取得する方法?

chlCompanies.DataSource = dsCompanies.Tables[0]; 
chlCompanies.DisplayMember = "CompanyName"; 
chlCompanies.ValueMember = "ID"; 

が、どのように私はアイテムのテキストと値を確認することができます - 私は、以下に示すように、このコントロールを囲まれています。むしろ、テキストと値にアクセスするCheckedItemsをどのように列挙できますか?

時間を共有してくれてありがとう。

答えて

25

キャスト元の型にそれ、あなたがテーブルを結合している場合はDataRowViewになり、あなたが得ることができます適切な列のIDとテキスト:

+0

私の友人、あなたは私の質問で徹底的に行っていないと思います。私はCheckedListBoxを使用しています。私は選択を必要としない、代わりに私はチェック項目が欲しい。このプロパティは、選択した項目の値のみを返します。 – IrfanRaza

+0

コンパイラはSelectedValueでエラーメッセージを生成します。 – IrfanRaza

+0

@ w69rdy: 'CheckedItems'プロパティは' objects'の配列です。 'object'は' SelectedValue'プロパティを持たず、何でもかまいません。 –

7

あなたはCheckedItemsプロパティを反復処理することができます。

foreach(object itemChecked in checkedListBox1.CheckedItems) 
{ 
    MyCompanyClass company = (MyCompanyClass)itemChecked;  
    MessageBox.Show("ID: \"" + company.ID.ToString()); 
} 

http://msdn.microsoft.com/en-us/library/system.windows.forms.checkedlistbox.checkeditems.aspx

+0

ありがとうエバン!しかし、私の質問は、チェックされた項目の関連IDを取得する方法ですか? – IrfanRaza

+0

@IrfanRaza:編集したコードサンプルを見てください。チェックされた各アイテムをカスタムデータ型にキャストして、その特定のプロパティにアクセスする必要があります。 –

12

EDIT:少し遅れてDataTableにバインドされていたことがわかりました。その場合、そのアイデアは同じで、DataRowViewにキャストしてからプロパティを取って、そのクラスで作業したい場合はDataRowになることができます。

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    MessageBox.Show(row["ID"] + ": " + row["CompanyName"]); 
} 

あなたは彼らの強く型付けされた同等物にアイテムを投げたり解析する必要がある、または以下に示すDataRowExtensions.Field methodを使用するようにSystem.Data.DataSetExtensions名前空間を使用します。

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var row = (item as DataRowView).Row; 
    int id = row.Field<int>("ID"); 
    string name = row.Field<string>("CompanyName"); 
    MessageBox.Show(id + ": " + name); 
} 

は商品をキャストする必要がありますクラスのプロパティにアクセスします。

foreach (var item in checkedListBox1.CheckedItems) 
{ 
    var company = (Company)item; 
    MessageBox.Show(company.Id + ": " + company.CompanyName); 
} 

代わりに、明示的にループ内でキャストせずに戻って結果を強く得る型付けするOfType拡張メソッドを使用することができます。

foreach (var item in checkedListBox1.CheckedItems.OfType<Company>()) 
{ 
    MessageBox.Show(item.Id + ": " + item.CompanyName); 
} 
+1

優秀な回答! – MiBol

-2

あなたはこれを試すことがあります。

string s = ""; 

foreach(DataRowView drv in checkedListBox1.CheckedItems) 
{ 
    s += drv[0].ToString()+","; 
} 
s=s.TrimEnd(','); 
+0

SO、Madhuchhandaへようこそ。あなたの答えは、すでに提供されている他の回答とどのように大きく異なっていますか?雑音を増やすだけで重複した回答を表示しないようにしてください。 –

0

Egypt Development Blog : Get value of checked item in CheckedListBox in vb.net

バインドにCheckedListBox後のデータであなたがチェックされた項目の値が

For i As Integer = 0 To CheckedListBox1.CheckedItems.Count - 1 
        Dim XDRV As DataRowView = CType(CheckedListBox1.CheckedItems(i), DataRowView) 
        Dim XDR As DataRow = XDRV.Row 
        Dim XDisplayMember As String = XDR(CheckedListBox1.DisplayMember).ToString() 
        Dim XValueMember As String = XDR(CheckedListBox1.ValueMember).ToString() 
        MsgBox("DisplayMember : " & XDisplayMember & " - ValueMember : " & XValueMember) 
Next 

今あなたがループ内で2変数XDisplayMemberそしてXValueMemberからにCheckedListBoxに

希望をチェックされた項目の値または表示を使用することができます得ることができます便利である。

0
foreach (int x in chklstTerms.CheckedIndices) 
{ 
    chklstTerms.SelectedIndex=x; 
    termids.Add(chklstTerms.SelectedValue.ToString()); 
} 
-1

試してみてください。

foreach (var item in chlCompanies.CheckedItems){ 
    item.Value //ID 
    item.Text //CompanyName 
    } 
+0

あなたは、コードが何をしているかについての少しの説明を加えるべきです。あなたのコードにはセミコロンもありません。 –

0

にCheckedListBoxで選択されたすべての項目は、この試す取得するには:この場合

をTHS値は文字列ですが、それは、オブジェクトの他のタイプの実行です:

for (int i = 0; i < myCheckedListBox.Items.Count; i++) 
{ 
    if (myCheckedListBox.GetItemChecked(i) == true) 
    { 

     MessageBox.Show("This is the value of ceckhed Item " + myCheckedListBox.Items[i].ToString()); 

    } 

} 
関連する問題