1

私のアプリケーションは、画像の上にボックスを描画できる winform で構成されています。これらのボックスには、座標、タイプ (メイン クラスから派生したすべてのFormBoxクラス)、および可能なgroup引数 (エクスポート用に生成された XML 内) があります。

このグループ引数は、ユーザーが ComboBox から選択します。最初は、ComboBox は空で、ユーザーGroupNameは 1 つのタイプのボックスに を設定して、同じタイプの他のボックスの ComboBox リストを作成することができます。これにより、それらをグループ化するかどうかを指定できます。

現在、複数のボックス タイプのグループ化を組み合わせる必要があり、この ComboBox を設定する方法を求めて頭を壁にぶつけています。

1 つのボックス タイプの場合、実際には問題はありません。

cboUserField_GroupName.DataSource = (from aBox in someFormData.Boxes
where (aBox is UserContentFormBox) select (aBox as UserContentFormBox)).GroupBy(x => x.GroupName).Select(x => x.First()).ToList();

cboUserField_GroupName.ValueMember = "GroupName";

しかし、2 つの別個のリストがあり、それぞれに の子クラスからのオブジェクトのコレクションがFormBox取り込まれているため、ComboBox コントロールを結合リストにバインドしたいと思いますGroupName。文字列であるかオブジェクトであるかはあまり重要ではありません。これは、主に単純な から value メンバーが何であるかを理解できなかったため、あまり効果がありませんでしたList<string>。さらに、とにかくリストが null オブジェクトでいっぱいになってしまったためです。

List<string> groupNames = (from aBox in someFormData.Boxes where (aBox is UserContentFormBox || aBox is VATReturnFormBox) select aBox.GroupName).Distinct().ToList();

cboUserField_GroupName.DataSource = groupNames.ToList();

つまり、基本クラスから派生したオブジェクトで (ラムダを使用して) 埋められたリストに ComboBox コントロールをバインドするにはどうすればよいでしょうか? バインディングはGroupNameプロパティ上にある必要があります。

List<FormBox>各リストを簡単に結合できる に戻す必要がありますか? これを行うための他のより良い方法はありますか?

4

1 に答える 1

0

わかりました。まず、2 つList<string>のオブジェクトGroupNameプロパティを作成します。

List<string> firstList = (from aBox in someFormData.Boxes
where (aBox is UserContentFormBox)
select (aBox as UserContentFormBox).GroupName).Distinct().ToList();

List<string> secondList = (from aBox in someFormData.Boxes
where (aBox is VATReturnFormBox)
select (aBox as VATReturnFormBox).GroupName).Distinct().ToList();

次に、これらのリストを結合し、null と重複を削除し、並べ替えて新しいリストに入力します。

List<string> groupNames = firstList.Union(secondList).Where(x => x != null).Distinct().OrderBy(x => x).ToList();

最後に、必要な ComboBoxes に値を入力します。

cboUserField_GroupName.Items.AddRange(groupNames.ToArray());
cboVATReturn_GroupName.Items.AddRange(groupNames.ToArray());

とにかくありがとう。

于 2012-12-20T09:12:19.237 に答える