Datagridview AutoSizeColumnsMode effizient nutzen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Semiconductor.

    Datagridview AutoSizeColumnsMode effizient nutzen

    huhu liebe Gemeinde,

    ich nutze die Datagridview seit längerem und probiere da viele Sachen aus.

    Ich habe festgestellt, dass die effektive Performance mit "AutoSizeColumnsMode" bei Rows.count > 500 seeehr träge wird.

    Ich nutze folgenden Code:

    VB.NET-Quellcode

    1. DataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader


    Sobald ich das nutze und normal die Columns zum Sortieren anklicke, friert der Hauptthread für mehrere Sekunden ein, ehe was passiert.

    Ich habe quasi schon versucht, das Sortieren zu erledigen und erst dann den AutoSize auf AllCells zu setzen, sodass vielleicht der aktive Mode die Performance nicht beeinträchtigt.

    Meine Frage ist, wie kann ich das AutoSize effektiv nutzen und das Sortieren bei 100-500 Rows trotzdem schnell erledigen?
    Gibt es eine Funtkion für ein bedarfsgerechtes AutoSize?

    Sobald ich sortiere, schalte das AutoSize aus, belass aber die Parameter, und wenn ich dann nichts mache, oder zumindest nicht sortiere, kann die Datagridview wieder die AutoSize anwenden

    MfG
    Sala
    @Semiconductor
    Deaktiviere / Aktiviere die interne Updatefunktion des DGV während des Umbaus:

    VB.NET-Quellcode

    1. dgv.SuspendLayout()
    2. ' was tun
    3. dgv.ResumeLayout()
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank für die Info!
    Ich werde das auf jeden Fall ausprobieren, gleichzeitig stieß ich auf ein neues Problem.

    Meine DGV wird mit folgenden Daten gefüttert:

    VB.NET-Quellcode

    1. DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss")


    28.01.2015 ...
    02.02.2015 ...
    13.04.2015 ...

    Wenn ich die natürliche Sortierfunktion des Columns nutze, sieht es wie folgt aus:

    02.02.2015 ...
    13.04.2015 ...
    28.01.2015 ...

    Wie kann ich die Sortierfunktion zumindest für diesen Row mit dem String so umstellen, dass es chronologisch sortiert wird?

    Ich will quasi, dass diese am Column geschieht und nicht durch ein Extrabutton.
    Das liegt daran, daß die Daten als String vorliegen, besser wäre es, wenn du den richtigen Datentyp, nämlich DateTime, nutzen würdest und die Daten in einem DataSet vorhältst.
    Dann übernimmt das DataSet die korrekte Sortierung.

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

    Ich nutze eine normale Datatable, die an eine DGV gebunden wird.

    VB.NET-Quellcode

    1. dt_liste.Rows.Add(datetime.now)




    So funktioniert es leider auch nicht, obwohl bei der Definition von dt_liste folgendes steht:

    VB.NET-Quellcode

    1. With dt_liste
    2. .Columns.Add("Datum", GetType(System.DateTime))
    3. .TableName = "Liste"
    4. End With
    Tut mir Leid, das hat auf jeden Fall geholfen. da war ich etwas zu schnell! ^^"

    Ich habe beim ausprobieren von Suspend und Resumelayout folgenden Bug festgestellt:
    Ich habe zwei Datagridviews,

    VB.NET-Quellcode

    1. Datagridview1.datasource = dt_liste1
    2. Datagridview2.datasource = dt_liste3



    In einer Schleife im Thread geschieht folgendes, sehr einfaches Beispiel:

    VB.NET-Quellcode

    1. dt_liste1.Rows.Add(...)
    2. Invoke(Sub() dt_liste3 = dt_liste1.Copy)


    Datagridview1 zeigt den Inhalt von dt_liste1 an, allerdings zeigt Datagridview2 den Inhalt von dt_liste3 nicht an, obwohl das ja identisch sein müsste mit dt_liste1?

    Wenn ich die Rows.count von dt_liste3 abfrage, stimmt sie mit der Anzahl der Rows mit dt_liste1 überein.

    Datagridview2 aktualisiert sich somit nicht?
    Datagridview2.update hat da nichts gebracht. Woran könnte das liegen?

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Semiconductor“ ()