DataGridView - Sortierung per Code vorgeben

  • VB.NET

Es gibt 22 Antworten in diesem Thema. Der letzte Beitrag () ist von jan99.

    DataGridView - Sortierung per Code vorgeben

    Moin!

    ich habe ein DataGridView und möchte die Strings in der Spalte 2 aufsteigend sortieren.

    Es gibt ja die SortMode-Eigenschaft mit dem möglichen Wert Programmatic.

    Aber wo kann ich die Art der Sortierung dann zuweisen?

    Gruß Jan
    Hi !

    danke - aber das klingt nach Datenbank.

    Das Problem ist nun nur, dass ich die Daten manuell anhängt! :(

    Visual Basic-Quellcode

    1. ...
    2. For i As Integer = 0 To files.Count - 1
    3. Dim row_doc As ArrayList = New ArrayList
    4. FileNameErr = "./."
    5. Try
    6. If files(i).Name.Length > 11 Then
    7. FileNameErr = files(i).Name
    8. Dim DatePart As String = files(i).Name.Substring(0, 10)
    9. Dim dt As DateTime = Date.ParseExact(DatePart, "yyyy-MM-dd", culture)
    10. 'ListOfFiles.Add(dt, files(i).FullName)
    11. row_doc.Add("") 'Button für das Öffnen
    12. row_doc.Add(files(i).Name)
    13. row_doc.Add(System.IO.Path.GetDirectoryName(files(i).FullName))
    14. End If
    15. If row_doc.Count > 0 Then Control.Rows.Add(row_doc.ToArray)
    16. CountListed += 1
    17. Catch ex As Exception
    18. ' hier wurde nicht das passende Datum angegeben
    19. MsgBox("unerwarteter Fehler in EBL_Ex2GrundDok > frm_GrundstDoku > ScanFiles" & vbCrLf & _
    20. "Index: " & i.ToString & vbCrLf & _
    21. "Filename: " & FileNameErr & vbCrLf & _
    22. ex.ToString, MsgBoxStyle.Critical, k_AppName)
    23. End Try
    24. Next i
    25. ...
    26. ...


    Gruß Jan

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

    ErfinderDesRades schrieb:

    jan99 schrieb:

    danke - aber das klingt nach Datenbank.
    ist es aber nicht - wie kommst du dadrauf?
    Es klingt nach Databinding - hat mit Datenbank nichts zu tun.

    jan99 schrieb:

    Das Problem ist nun nur, dass ich die Daten manuell anhängt!
    Jo - dassisn Problem. Wieso machst du nur sowas?


    Ich habe jetzt nochmal gesucht im Web und immer wieder finde ich nur Wege über SQL, Access und anderes DB-Zeug.

    Wenn es aber damit nichts zu tun haben soll - kann mir jemand ein Beispiel oder Link zukommen lassen?

    Gruß Jan
    copy&paste sei Dank: hier der Link zu den vier Views auf Video
    Darin wird gezeigt, wie man u.a. Datenbindung ohne Datenbankzugriffe hinbekommt.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Moin!

    so, jetzt bin ich fleissig dabei die Filme mir anzusehen. Im Hinterkopf geistern schon Fragen - die glücklicherweise noch nicht aktuell.

    Aber ich würde nicht hier schreiben, wenn nicht doch eine Frage da ist.

    Ich habe jetzt für mein Datagridview eine Tabelle angelegt.



    Diese habe ich auch per Drag&Drop in die Form eingebunden und erfolgreich befüllt.

    Nun ist es so das später die ID Spalte ausgelendet werden soll und dafür zwischen ID und der Datumsspalte ein Öffnen-Spalte (als DataGridViewButtonColumn) eingebunden werden soll. Das hat auch wieder soweit geklappt.

    Was mich nun aber stört ist die Tatsache, dass die Button mit den ID's automatisch beschriftet werden.



    In den Eigenschaften der Spaltendefinition Öffnen habe ich aber keine Datenanbindung finden können.

    Wie kann ich die Nummern (Beschriftung) dort wegbekommen?

    Gruß Jan
    1. Du mischst im tDS (typ. DataSet) Deutsch und Englisch. Sei konsequent. Aber es ist Dein Projekt.
    2. Irgendwas muss in den Spalten drinstehen. Sonst wär es nicht gebunden. Was willst Du denn drinstehen haben? Ändere in der Spalte den DisplayMember.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Erst einmal wieder Danke für die Rückmeldung

    VaporiZed schrieb:

    1. Du mischst im tDS (typ. DataSet) Deutsch und Englisch. ...


    An welcher Stelle habe ich was durcheinander gebracht ?

    VaporiZed schrieb:

    1. Du mischst im tDS (typ. DataSet) Deutsch und Englisch. Sei konsequent. Aber es ist Dein Projekt.
    2. Irgendwas muss in den Spalten drinstehen. Sonst wär es nicht gebunden. Was willst Du denn drinstehen haben? Ändere in der Spalte den DisplayMember.


    Die Buttons brauchen nicht beschriftet werden!

    Den DisplayMember habe ich in der Button-Spalte nicht gefunden und bei der Suche bin ich dann aber über DataPropertyName gestolpert. Da war noch ID eingetragen - vermutlich hat sich die Buttonspalte die Zuordnung beim Anlegen übernommen.

    Gruß Jan

    Inzwischen habe ich noch einmal weitergesucht und folgende Zeile gefunden:

    VB.NET-Quellcode

    1. [/i]DVG.Columns(1).HeaderCell.SortGlyphDirection = SortOrder.Ascending 'bzw. Descending[i]


    Mein DataGridView heißt DVG und es soll die Spalte mit dem Datum sein - also nach folgdendem Bild die 1.



    Aber egal, ob ich Ascending oder Descending einsetze es wird immer in derselben Reihenfolge angezeigt.

    Bin ich da auf dem Holzweg? (mal wieder?).

    Gruß Jan

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

    Ja gut. Ist Ansichtssache, ob man "Folder" jetzt verwendet oder "Ordner". Pillepalle. Hast recht.
    Die Buttons (achja, sind ja keine Comboboxen) musst Du so einstellen, dass sie ungebunden sind. Also nimm ihnen die DataSource weg.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Moin!

    bleibt vorerst nur noch die Frage nach der richtigen Sortierung.

    Zwischenzeitlich sehe ich schon für einige Dinge die Vorteile der DataSet - aber nach den Videos wird es eine Zeit dauern dieses zu verinnerlichen.

    Danke auch für die Geduld.

    Jan
    Nun, wie EdR schon schrieb: Die Sortierung geht (neben dem Anklicken der Spaltenköpfe im DGV/DVG) über die BindingSource:

    VB.NET-Quellcode

    1. DateibezeichnungBindingSource.Sort = "Datum"
    alternativ: "Datum DESC", um absteigend zu sortieren, siehe MSDN-Beitrag
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«
    Du platzierst ihn dorthin, wo er gebraucht wird. Da Du mit der Festlegung der BS-Sortiereigenschaft diese bis zum Widerruf festlegst, werden neue Einträge entsprechend einsortiert im DGV angezeigt. D.h. wenn Du es immer sortiert haben willst, kannst Du den Code gleich zum Programmstart ausführen lassen. Willst Du, dass keine Sortierung bei Änderungen mehr eintritt, setz die BS-Sort-Eigenschaft auf Nothing. Achtung! Dann wird wieder nach ID sortiert, wenn diese so eingestellt ist, wie im tDS von Dir gezeigt (AutoIncrement, Unique)
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von VaporiZed, mal wieder aus Grammatikgründen.

    ― häufig von mir verwendete Abkürzungen: CEs = control elements (Labels, Buttons, DGVs, ...) und tDS (typisiertes DataSet)
    ― If Not GrammarIsOk() Then AssumeThatCodeIsOk = False
    ― »Oh, großes Spaghetticodemonster. Bitte schicke mir Durchblick! Oder zumindest eine Gabel. Oder – wenn es kein Besteck mehr gibt – zumindest Glasnudeln.«

    Neu

    Moin

    es ist zwar WE und ich überlege das eine oder andere. Wo das Thema noch frisch ist für mich stellt sich mir noch eine Frage. Wie binde ich Bilder in eine Tabelle ein?

    Nehmen wir nur das Beispiel, das in einer Spalte Dateitypen sind und in der Tabelle zugehörige Pictogramme angezeigt werden sollen.

    Gruß Jan

    Neu

    Mach ne Spalte mit dem Datentyp Image. Die kann dann Bildle anzeigen.

    P.s.
    Man kann sogar zur Laufzeit die Icons der Dateien ermitteln und anzeigen. Ich hab mir dazu mal ne Klasse geschrieben, welche anhand der Dateiendung mit das richtige Icon zurück gibt. Die ermittelten Icons werden in einem Dictionary abgelegt, damit man da nicht permanent neu die Icons ermitteln muss.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    Neu

    jan99 schrieb:

    Gibt es die klasse wo?

    Ja, aber die kriegste nicht :P Musst du dir selbst schreiben. Ist aber kein Hexenwerk. Bei konkreten Fragen helfe ich dir aber gerne weiter.
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen