none
Support the "BindingSource.Sort" sorting a list, with 2 sorting criteria RRS feed

  • 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

    Donnerstag, 13. Dezember 2012 08:57

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


    Donnerstag, 13. Dezember 2012 10:26
    Moderator
  • 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

    Samstag, 15. Dezember 2012 17:51
    Moderator

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


    Donnerstag, 13. Dezember 2012 10:26
    Moderator
  • JO danke, hatte es dann auch gemerkt ;D Allerdings unterstützt die IBindingList die AdvancedSorting- Eigenschaft nicht ausser man schreibt sich eine eigene :D Naja trotzdem danke

    mfg Gavin

    Samstag, 15. Dezember 2012 16:38
  • 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

    Samstag, 15. Dezember 2012 17:51
    Moderator
  • 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,
    Robert


    Robert 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.

    Donnerstag, 20. Dezember 2012 16:13
    Moderator