Datagridviewcolumn.Sort Probleme

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von Haudruferzappeltnoch.

    Datagridviewcolumn.Sort Probleme

    Hi,

    wahrscheinlich mein Fehler. Ich versuche

    VB.NET-Quellcode

    1. dgvabc.Sort(dgvabc.Columns.Item(4), ListSortDirection.Descending)

    Aber er sagt mir ListSortDirection ist nicht definiert.

    Bei Microsoft steht sogar sowas:

    VB.NET-Quellcode

    1. Dim direction as ListSortDirection

    Nichtmal das kann ich machen, selbe Fehlermeldung.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Haudruferzappeltnoch“ ()

    Ich habs gefunden, es fehlte der Import für das zuständige Paket.

    Allerdings kann ich trotzdem noch nicht sortieren:
    Ich ziehe die Daten für den DGV aus einer Datenbank füge allerdings noch eine Spalte an das DGV an. Nach dieser Spalte kann ich offensichtlich nicht sortieren, da es keine "datengebundene Spalte" ist.
    Lässt sich das simulieren?
    Also ich denke ich habs jetzt soweit in Sql verwirklicht.

    Jetzt hätte ich allerdings wieder eine neue Frage, wenn ich

    VB.NET-Quellcode

    1. dgvabc.Sort(dgvabc.Columns.Item(4), ListSortDirection.Descending)

    anwende. Ändere ich dadurch dann den Wert von z.B.:

    VB.NET-Quellcode

    1. dgvabc.Item(4, 2).Value

    Oder bleibt der Datensatz immer gleich und ich sortiere nur meine Anzeige?
    Mal mit Databinding und typisiertem Dataset anzufangen kommt nicht in Betracht?

    Bei einer BindingSource kann man sehr einfach eine Sortierung setzen, und dann ist immer sortiert.
    Also auch neu hinzukommende Datensätze werden entsprechend der Sortierung aufgelistet.
    Oder Änderungen am Datensatz ziehen eine automatische Änderung seiner Position im DGV nach sich.

    dgv.Sort(???) hab ich noch nie verwendet.

    Aber um deine Frage zu beantworten: Die Datensätze bleiben dieselben - wär ja noch schöner!
    Eine DataTable kannst Du zwar mit typfesten Spalten gestalten, das führt aber dazu, dass diese Typen erst zur Laufzeit bekannt sind. (Typ)Sicherer ist die Gestaltung mit einem tDS (typisierten DataSet). Da legst Du schon zur Designzeit, eben im tDS-Designer die Typen fest. Und der Compiler versteht das und meckert bereits beim Programmieren, wenn Du Werte mit falschem Typ in eine DataTable packen willst. Daher: tDS ist sicherer.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Hast du mal ein Beispiel?

    Mein Ausgangspunkt ist in etwa so:

    VB.NET-Quellcode

    1. ...
    2. Using sda as New NpgsqlDataAdapter(cmd)
    3. sda.Fill(Table1)
    4. End Using


    Table1.Rows(0).Item(4).Value ist bei mir allerdings leer. Obwohl in der Datenquelle dort z.B ein Decimal hinterlegt ist. Im DGV wird dieser auch angezeigt.

    Mein Code von Quelle bis DGV ist bisher:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Table1 = New DataTable()
    2. Table2 = New DataTable()
    3. bs1 = New BindingSource()
    4. bs2 = New BindingSource()
    5. lblfeedbackrefresh.Text = "Lade Daten..."
    6. Using cmd = New NpgsqlCommand()
    7. cmd.Connection = npgConnection
    8. cmd.CommandText = "bla"
    9. Using sda As New NpgsqlDataAdapter(cmd)
    10. sda.Fill(Table2)
    11. End Using
    12. End Using
    13. bs2.DataSource = Table2
    14. dgv2.DataSource = bs2
    15. Using cmd = New MySqlCommand()
    16. cmd.Connection = myConnection
    17. cmd.CommandText = "bla"
    18. Using sda As New MySqlDataAdapter(cmd)
    19. sda.Fill(Table1)
    20. End Using
    21. End Using
    22. bs1.DataSource = Table1
    23. dgv1.DataSource = bs1
    24. Table2.Columns.Add(New DataColumn("Ke_Prüfnummer", GetType(Integer)))
    25. Table1.Columns.Add(New DataColumn("Ke_Prüfnummer", GetType(Integer)))
    26. lblfeedbackrefresh.Text = "Daten geladen"