1

さまざまな属性と関連オブジェクトのリストを含むクラスがあります。クラスのインスタンスを入力/編集するためのフォームを作成しています。オブジェクト (クラス インスタンス) の属性を入力/編集フォームのコントロールにデータバインドしています。

関連するオブジェクトリストをリストボックスにバインドする方法が見つからないことを除いて、すべて正常に機能します(SelectionMode MultiExtended が選択されています)。リストボックス コントロールには、すべての可能な値が含まれ、関連オブジェクトのリストにある値が選択されている必要があります。

例えば

関連オブジェクト「製品」を持つクラス「クライアント」があるとしましょう (これは、この特定のクライアントが私から購入している製品のリストになります) フォームでクライアントレコードを編集するとき、リストボックス (または devexpress が必要です) listboxcontrol) 「製品」には、私が提供できるすべての製品が含まれており、このクライアントが購入している製品のみが選択されています。

データバインディングを使用してこのタスクを達成するにはどうすればよいですか?

PS 複数選択でリストボックスにバインドすることはできなかったという古いトピックを見つけました...それはまだ可能ですか? 多分あなたはそれを別の方法で行うことを提案できますか?

複数選択WinFormsリストボックスでの双方向バインディング?

4

1 に答える 1

1

SelectedItemsDevExのプロパティListBoxControlは読み取り専用であるため、コレクションをバインドすることはできません。したがって、簡単な答えは、いいえ、この状況ではまだデータ バインディングを使用できません。すべての製品のリストをListBoxControlデータ バインドして .

代わりに、このリストボックスについては、データ バインディングをまったく使用せずに処理を行います。たとえば、コントロールにデータを入力するには:

// populate the listbox with a list of all Products
// allProducts is an IEnumerable<Product> where Product has a Description property
listBoxControl1.Items.AddRange(allProducts.Select(x => x.Description).ToArray());

次に、Client クラスで見つかった選択を行います。

// "client" is type Client which contains a collection of selected Products
foreach (var product in client.Products)
{
    var idx = listBoxControl1.FindStringExact(product.Description);
    listBoxControl1.SetSelected(idx, true);
}

次に、保存するときは、Client オブジェクトの Products コレクションをクリアし、ListBoxControl.SelectedItemsプロパティを使用して再設定します。

于 2013-08-24T13:54:46.397 に答える