0

簡単だと思ったけどそうでもない

リストボックスがバインドされたWindowsフォームがあります(値メンバーと表示メンバーを含む)

リストボックスの複数選択を有効にしました

そのため、選択したアイテムの選択した値のみをすべて取得する必要があります(バインドされているので、テキストや選択したテキストではなく、選択した値が必要です)

これらの値を他のテーブルに挿入できます

私はこれを試しましたが、うまくいきません

 for (int x = 0; x <= listProjects.SelectedItems.Count; x++)
 {
     if(listProjects.GetSelected(x) == true)
     {
         string d = listProjects.SelectedValue.ToString();
         string s = listProjects.SelectedItems[x].ToString();

         //listProjects.DisplayMember[x].ToString();
         //listProjects.Items[x].ToString();
     }
  } 
4

2 に答える 2

1

アイテムを ListBox にバインドすると、ListBox.Items はバインドしたアイテムのタイプになるため、アイテムのタイプが BoundItemType で、Value が BoundItemType のプロパティであると仮定すると、次のようなことができます。

for (int x = 0; x <= listProjects.SelectedItems.Count; x++)
{
    BoundItemType boundItem = listProjects.SelectedItems[x] as BoundItemType;
    string selectedValue = boundItem.Value;
}
于 2013-10-13T11:20:36.057 に答える
0

DataSource要素の型がItemTypeで、値のメンバーがであると仮定すると、ItemValue選択した各項目 (の) をその型にキャストobjectして、必要な値を取得できます。

var values = listBox1.SelectedItems.OfType<ItemType>()
                                   .Select(item=>item.ItemValue).ToList();

Reflectionが有効であることを確認するためだけに、基礎となる項目タイプについて事前に知らなくてもいつでも使用できValueMemberます。ただし、これは参考用であり、推奨されていないと思います

var values = listBox1.SelectedItems.OfType<object>()
                     .Select(item=> item.GetType()
                                        .GetProperty(listBox1.ValueMember)
                                        .GetValue(item, null)).ToList();
于 2013-10-13T11:15:52.533 に答える