5

これについて少し調査しましたが、データ バインドされたコンボ ボックスを並べ替える唯一の方法は、データ ソース自体 (この場合は DataSet 内の DataTable) を並べ替えることだと思われます。

その場合、質問は DataTable をソートする最良の方法は何ですか?

コンボ ボックスのバインドは、次を使用してデザイナの初期化で設定されます。

myCombo.DataSource = this.typedDataSet;
myCombo.DataMember = "Table1";
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";

設定してみました

this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
しかし、違いはありません。typedDataSet.Merge 呼び出しの前後に、コントロール コンストラクターでこれを設定しようとしました。

4

7 に答える 7

7

DataTable を使用している場合は、(DataTable.DefaultView) DataView.Sortプロパティを使用できます。柔軟性を高めるために、BindingSourceコンポーネントを使用できます。BindingSource はコンボボックスの DataSource になります。次に、コンボボックスの DataSource を変更せずに、データ ソースを DataTable から List に変更できます。

BindingSource コンポーネントは多くの目的を果たします。まず、通貨管理、変更通知、および Windows フォーム コントロールとデータ ソース間のその他のサービスを提供することにより、フォーム上のコントロールをデータにバインドすることを簡素化します。

于 2008-08-27T08:30:13.223 に答える
2

実際には、DataTableの既定のビューを並べ替えることができます。

myDataTable.DefaultView.Sort = "Field1, Field2 DESC";

これにより、DataTable から直接取得した行が並べ替えられます。

于 2008-08-27T08:28:40.153 に答える
1

テーブルではなく、Sort プロパティを設定した後、DefaultView を Controls データソースにバインドしてください。

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";
于 2008-08-27T11:53:11.487 に答える
0

データは DataTable にある必要がありますか? SortedList を使用してコンボ ボックスにバインドすると、より簡単な方法になります。

DataTable を使用する必要がある場合は、Select メソッドを使用して DataView を取得し、並べ替えパラメーターを渡すことができます。

DataView dv = myDataTable.Select("filter expression", "sort");
于 2008-08-27T08:25:07.587 に答える
0

ComboBox を並べ替える最も簡単な方法は、ComboBox.Sortedプロパティを使用することです。ただし、データ バインディングを使用している場合は機能しません。その場合、データ ソース自体を並べ替える必要があります。

SortedListまたはSortedDictionary (どちらもキーでソート)、またはDataViewを使用できます。

DataView には、並べ替え式 (文字列) を受け入れるSortプロパティがあります。次に例を示します。

view.Sort = "State, ZipCode DESC";

上記の例では、State と ZipCode の両方が、DataView の作成に使用される DataTable の列です。

于 2008-08-27T08:45:19.067 に答える
0

この質問に対する回答は既に選択されていると思いますが、フォームに DataView を配置し、それを DataSet/DataTable にバインドし、デザイナーでビューの並べ替えを設定することをお勧めします。次に、コンボボックスを DataSet/DataTable ではなく DataView にバインドします。

于 2009-03-29T16:22:11.773 に答える