Benutzer mit den meisten Antworten
Support the "BindingSource.Sort" sorting a list, with 2 sorting criteria

Frage
-
string columnName = string.Empty; bool tag; if (grdInfo.Tag != null) { tag = (bool)grdInfo.Tag; } else { tag = false; } switch (e.ColumnIndex) { case 0: columnName = "InfoResult"; break; case 1: columnName = "InfoBez"; break; case 2: columnName = "InfoResult"; break; case 3: break; case 4: columnName = "InfoPackage"; break; } if (!String.IsNullOrEmpty(columnName)) { resultInfoListBindingSource1.Sort = string.Format("{1} {0}", tag == false ? "ASC" : "DESC", columnName); resultInfoListBindingSource1.ResetBindings(false); grdInfo.Tag = !tag; }
Is my Code in an Eventmethod, when the Header of the grdInfo is clicked.
But every time I click the Button DataRows will be sorted different.
Example with sorting on InfoResult int the Grid:
First Click:
TEST
YiLOL
€-$
$-§
Second Click:
€-$
$-§
YiLOL
TEST
Third Click:
TEST
€-$
YiLOL
$-§I want to Sort on a second criteria, like:
resultInfoListBindingSource1.Sort = string.Format("{1} {0}, InfoBez {0}", tag == false ? "ASC" : "DESC", columnName);
But this doesn't work.
Can someone help me??? can I sort on 2 criteria with the List in the BindingSource. I know the examples from msdn and so on, but I found nothing about this Problem.
Thanks for your answers :D
Antworten
-
Hi,
Das Sortieren über BindingSource.Sort funktioniert nur, wenn die daran gebundene Datenquelle IBindingList oder IBindingListView implementiert, d.h. wenn IBindingList.SupportsSorting den Wert true zurückgibt. Um nach mehreren Spalten zu sortieren, muss die Datenquelle außerdem noch true für IBindingListView.SupportsAdvancedSorting zurückgeben. Wenn das der Fall ist, dann kannst Du an die Sort-Eigenschaft einen Ausdruck zuweisen, der zwei Spalten angibt, genau so wie Du das auch schon mit resultInfoListBindingSource1.Sort probiert hast.
Beim erstmaligen Anzeigen der Daten erscheinen sie im DataGridView entsprechend der Sort-Eigenschaft sortiert (ich nehme an, dass Du ein DataGridView verwendest). Allerdings unterstützt das DataGridView standardmäßig nur das Sortieren nach einer einzigen Spalte, weswegen Du einiges programmatisch unternehmen mußt, damit das Ganze auch bei weiteren Sortier-Klicks im Spaltenkopft funktioniert. Was genau Du ändern mußt, findest Du in diesem Beispiel:
How do I sort on multiple columns?
Gruß
Marcel- Bearbeitet Marcel RomaModerator Donnerstag, 13. Dezember 2012 10:32
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 16:12
-
Hallo,
Gerne. AdvancedSorting ist kein Member von IBindingList, sondern - wie ich oben bereits schrieb - von IBindingListView. Schnittstellen sind lediglich Verträge, es versteht sich von selbst, dass Du sie in den zu bindenden Klassen implementieren mußt.Aber sieh es mal so: Entweder Du willst nach zwei Kriterien gleichzeitig über die Sort-Eigenschaft sortieren können, oder Du willst es nicht. Und wenn Du's willst, bleibt dir nichts anderes übrig als den genannten Weg über IBindingListView bzw. einer Klasse zu nehmen, die IBindingListView implementiert.
Frei steht dir natürlich, ein Dritthersteller-Grid zu nehmen, das dies alles von Haus aus kann ( wenn das Projektbudget das hergibt).
Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 16:12
Alle Antworten
-
Hi,
Das Sortieren über BindingSource.Sort funktioniert nur, wenn die daran gebundene Datenquelle IBindingList oder IBindingListView implementiert, d.h. wenn IBindingList.SupportsSorting den Wert true zurückgibt. Um nach mehreren Spalten zu sortieren, muss die Datenquelle außerdem noch true für IBindingListView.SupportsAdvancedSorting zurückgeben. Wenn das der Fall ist, dann kannst Du an die Sort-Eigenschaft einen Ausdruck zuweisen, der zwei Spalten angibt, genau so wie Du das auch schon mit resultInfoListBindingSource1.Sort probiert hast.
Beim erstmaligen Anzeigen der Daten erscheinen sie im DataGridView entsprechend der Sort-Eigenschaft sortiert (ich nehme an, dass Du ein DataGridView verwendest). Allerdings unterstützt das DataGridView standardmäßig nur das Sortieren nach einer einzigen Spalte, weswegen Du einiges programmatisch unternehmen mußt, damit das Ganze auch bei weiteren Sortier-Klicks im Spaltenkopft funktioniert. Was genau Du ändern mußt, findest Du in diesem Beispiel:
How do I sort on multiple columns?
Gruß
Marcel- Bearbeitet Marcel RomaModerator Donnerstag, 13. Dezember 2012 10:32
- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 16:12
-
Hallo,
Gerne. AdvancedSorting ist kein Member von IBindingList, sondern - wie ich oben bereits schrieb - von IBindingListView. Schnittstellen sind lediglich Verträge, es versteht sich von selbst, dass Du sie in den zu bindenden Klassen implementieren mußt.Aber sieh es mal so: Entweder Du willst nach zwei Kriterien gleichzeitig über die Sort-Eigenschaft sortieren können, oder Du willst es nicht. Und wenn Du's willst, bleibt dir nichts anderes übrig als den genannten Weg über IBindingListView bzw. einer Klasse zu nehmen, die IBindingListView implementiert.
Frei steht dir natürlich, ein Dritthersteller-Grid zu nehmen, das dies alles von Haus aus kann ( wenn das Projektbudget das hergibt).
Gruß
Marcel- Als Antwort markiert Robert BreitenhoferModerator Donnerstag, 20. Dezember 2012 16:12
-
Hallo this User is deleted,
Ich gehe davon aus, dass die Antworten Dir weitergeholfen haben.
Solltest Du noch "Rückfragen" dazu haben, so gib uns bitte Bescheid.Grüße,
RobertRobert Breitenhofer, MICROSOFT
Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können.