in gebundenem DGV ist immer der erste DataSet Eintrag ausgewählt

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von DerSmurf.

    in gebundenem DGV ist immer der erste DataSet Eintrag ausgewählt

    Hallo ihr lieben
    Ich habe ein recht eigenartiges Problem, welches mich gerade wahnsinnig macht.
    Ich habe ein gebundenes DGV. Die rangehängte Bindingsource ist sortiert: DatumKundenbestellt DESC.
    Beim anzeigen der Userform, welches dieses DGV enthält, wird aber immer der erste Eintrag der Bindingsource ausgewählt - also der unterste.
    Ich öffne also die Userform und muss erstmal nach oben scrollen, um den aktuellen Eintrag anzeigen zu lassen.
    Dieses Verhalten hatte ich noch bei keinem DGV - ich finde aber keine passende Einstellung hierfür.
    Was übersehe ich?

    *Topic verschoben*

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Marcus Gräfe“ ()

    Ich hab das jetzt mal nachgestellt und glaub eine Logik zu erkennen.

    VB.NET-Quellcode

    1. Private Foo As Integer = 0
    2. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    3. If Foo = 0 Then Tds.Produkt.AddProduktRow(0, "B", 1)
    4. If Foo = 1 Then Tds.Produkt.AddProduktRow(1, "A", 2)
    5. If Foo = 2 Then Tds.Produkt.AddProduktRow(2, "C", 3)
    6. Label1.Text = ProduktBindingSource.Position.ToString
    7. Foo += 1
    8. End Sub

    Zuerst wird die Sortierung festgelegt, dann kommen die Daten. In dem Beispiel wird durch Klicken des passenden DGV-Headers nach dem String sortiert, absteigend, also von Z nach A.
    Das DGV ist leer. Es kommt die erste Zeile rein und die Daten werden als Referenz genommen, also das "B".
    Dann kommt die Zeile mit dem "A". Diese kommt nach "B", also wird die Zeile hinten angehängt. Die Selektierung bleibt auf der "B"-Zeile.
    Dann kommt die Zeile mit dem "C". Diese kommt vor "B", also wird die Zeile vorne angehängt. Die Selektierung bleibt auf der "B"-Zeile, ist dann aber nicht mehr Zeile#1, sondern Zeile#2.

    So schlussfolgere ich, dass die erste Zeile, die in Deinem DGV eingespielt wird, die Zeile mit dem ältesten Datum hat.
    Das einfachste wäre nach dem Laden der Daten DeineBS.MoveFirst aufzurufen.
    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.
    Morgen
    Ja, das löst das Problem. (So mache ich es aktuell: ​ UcKundenbestellung.BSKundenbestellung.MoveFirst()).
    Da ich dieses Verhalten aber noch in keinem anderen Programm hatte - und öfters mit sortierten BS arbeite - dachte ich, ich habe was falsch gemacht.
    Aber dem scheint ja dann nicht so zu sein.
    Teste es doch einfach mal bei anderen BindingSources, indem Du sie im Designer absteigend sortierend einstellst. Wenn es dann immer noch zu nicht erklärbarem Verhalten kommt, versuche es in einem Testprojekt zu isolieren.
    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.
    Nachdem du das Verhalten als normal bezeichnet hast, habe ich das schon angefangen.
    Alle Sortierungen im folgenden meinen eine Datumspalte absteigend sortiert (also neuestes Datum - und damit i.d.R. neuester Eintrag - ganz oben)
    Wenn ich im Designer sortiere ist immer die unterste DGV Spalte selektiert.
    Wenn ich im Code sortiere BEVOR die Daten im DGV sind, ist auch die unterste DGV Spalte sortiert.
    Wenn ich im Code sortiere NACHDEM die Daten im DGV sind, ist die oberste Spalte selektiert.

    Ich würde nun aber meine Sortierungen im Designer lassen (weil alle BS im Designer sortiert sind und es nur ein DGV betrifft) und helfe mir mit ​MoveFirst()

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