Frage

Ich habe diesbezüglich ein wenig recherchiert und es scheint, dass die einzige Möglichkeit, ein datengebundenes Kombinationsfeld zu sortieren, darin besteht, die Datenquelle selbst zu sortieren (in diesem Fall eine DataTable in einem DataSet).

Wenn dies der Fall ist, stellt sich die Frage, wie eine DataTable am besten sortiert werden kann.

Die Kombinationsfeldbindungen werden im Designer initialize using festgelegt

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

Ich habe es mit der Einstellung versucht

this.typedDataSet.Table1.DefaultView.Sort = "ColumnB DESC";
Aber das macht keinen Unterschied. Ich habe versucht, dies im Steuerkonstruktor vor und nach einem typedDataSet.Merge-Aufruf festzulegen.

War es hilfreich?

Lösung

Wenn Sie eine DataTable verwenden, können Sie (DataTable.DefaultView) verwenden. DataView.Sort Eigentum.Für mehr Flexibilität können Sie die verwenden Bindungsquelle Komponente.BindingSource ist die Datenquelle Ihrer Combobox.Dann können Sie Ihre Datenquelle von einer DataTable in eine Liste ändern, ohne die DataSource der Combobox zu ändern.

Die BindingSource -Komponente dient vielen Zwecken.Erstens vereinfacht es die Bindungssteuerungen in einem Formular zu Daten, indem Währungsmanagement, Änderungsbenachrichtigungen und andere Dienste zwischen Windows -Formularen und Datenquellen bereitgestellt werden.

Andere Tipps

Sie können das tatsächlich sortieren Standardansicht auf einer DataTable:

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

Dadurch werden alle Zeilen sortiert, die Sie direkt aus der DataTable abrufen.

Stellen Sie sicher, dass Sie die DefaultView an die Controls-Datenquelle binden, nachdem Sie die Sort-Eigenschaft festgelegt haben, und nicht an die Tabelle:

myCombo.DataSource = this.typedDataSet.Tables["Table1"].DefaultView;
myCombo.DisplayMember = "ColumnB";
myCombo.ValueMember = "ColumnA";

Josh Smith hat einen Blogeintrag Das beantwortet diese Frage und erledigt alles in XAML.

Müssen sich die Daten in einer DataTable befinden?Eine einfachere Möglichkeit wäre es, eine SortedList zu verwenden und diese an ein Kombinationsfeld zu binden.

Wenn Sie eine DataTable verwenden müssen, können Sie mit der Select-Methode eine DataView abrufen und einen Sortierparameter übergeben.

DataView dv = myDataTable.Select("filter expression", "sort");

Der einfachste Weg, eine ComboBox zu sortieren, ist die Verwendung von ComboBox.Sorted Eigentum.Dies funktioniert jedoch nicht, wenn Sie die Datenbindung verwenden.In diesem Fall müssen Sie die Datenquelle selbst sortieren.

Sie können entweder a SortedList oder SortedDictionary (beide nach dem Schlüssel sortieren), oder a Datenansicht.

Die DataView verfügt über eine Sortieren Eigenschaft, die einen Sortierausdruck (Zeichenfolge) akzeptiert, zum Beispiel:

view.Sort = "State, ZipCode DESC";

Im obigen Beispiel sind sowohl State als auch ZipCode Spalten in der DataTable, die zum Erstellen der DataView verwendet werden.

Mir ist klar, dass Sie Ihre Antwort auf diese Frage bereits ausgewählt haben, aber ich hätte vorgeschlagen, eine Datenansicht in Ihrem Formular zu platzieren, sie an Ihr DataSet/Ihre Datentabelle zu binden und die Sortierung für die Ansicht im Designer festzulegen.Anschließend binden Sie Ihre Combobox an die DataView und nicht an die DataSet/DataTable.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top