0

これは簡単なように思えますが、WPF / c# に慣れているため、ここで必要な構文がよくわかりません。基本的に、DataTable にバインドされた ListBox があり、ID 値に基づいて項目を選択したいと考えています。このようなもの。

lstUsers.DataSource = dtUsers
lstUsers.DisplayMember = "UserName"
lstUsers.SelectedItem = dtUsers.Select(String.Format("ID = {0}", myID))(0)

デバッガーで正しい DataRow が返されていることがわかりdtUsers.Select(String.Format("ID = {0}", myID))(0)ますが、SelectedItem を設定しても何も起こりません。ここで明らかな何かが欠けていると確信していますが、私が試したことはすべて効果がありませんでした。

4

4 に答える 4

1

使用できますLINQ-To-DataSet

var rows = dtUsers.AsEnumerable()
                   .Select((row,index) => new{ row,index })
                   .Where(x => x.row.Field<int>("ID")==myID);
if(rows.Any())
    lstUsers.SelectedIndex = rows.First().index;

VB.NET で:

Dim rows = dtUsers.AsEnumerable().
    Select(Function(r, i) New With {.row = r, .index = i}).
    Where(Function(x) x.row.Field(Of Int32)("ID") = myID)
If rows.Any Then
    lstUsers.SelectedIndex = rows.First().index
End If

Imports System.Linq( using System.Linq;C# では)を追加する必要があることに注意してください。

于 2012-09-28T14:21:13.053 に答える
1

SelectedItemSelectedIndexあなたが質問で使用したのは、実際にはorで提供された回答よりもはるかに信頼できるソリューションですSelectedValue

  • SelectedIndex簡単に範囲外になり、例外をスローする可能性があります。

  • SelectedValue2 つの項目が同じになる場合、間違った値を見つけることができますToString()

  • SelectedItemリスト項目の背後にあるオブジェクトに直接一致します。一致するものがない場合、リストボックスは項目が選択されていないままになります。質問の例で犯した唯一の間違いは、に割り当てようとしたことですStringSelectedItem、もともとは文字列を入力SelectedItemしていませんでした。のすべてのアイテムのタイプは何DataSourceですか? それを使用するとうまくいきます。

例:タイプmyClassi1の項目,i2ListBox.Itemsに追加すると、その値, ,がListBoxに表示されますが、ListBox.Itemsコレクションでは , , のままになります。その後、使用でき、アイテムが選択されます。しかし、それを試みてもうまくいきません。一致するものがないからです。これは、質問の例で試みたものであり、うまくいかなかった理由です。i3i1.ToString()i2.ToString()i3.ToString()i1i2i3ListBox.SelectedItem = i2i2ListBox.SelectedItem = i2.ToString()

リスト内のオブジェクトを使用する場合はSelectedItem、作業に固執し、使用しないSelectedIndexSelectedValue、欠点があるものを使用してください。

于 2013-09-20T06:46:32.627 に答える
0

解決策を見つけました

lstUsers.DataSource = dtUsers
lstUsers.DisplayMember = "UserName"
lstUsers.ValueMember = "ID"
lstUsers.SelectedValue = dtUsers.Select(String.Format("ID = {0}", myID))(0)("ID")
于 2012-09-28T14:34:43.053 に答える
0

代わりにこのコードを使用してください。

for (var i = 0; i < lstUsers.Items.Count; i++)
    if ((listBox1.Items[i] as YourClass).ID == myID)
      listBox1.SelectedIndex = i;
于 2012-09-28T14:16:00.840 に答える