none
DataGridViewAutoSizeColumnMode.AllCells Performance RRS feed

  • Frage

  • Hallo zusammen,

    ich würde gerne den AutoSizeMode meines DataGridView auf DataGridViewAutoSizeColumnMode.AllCells setzen. Wenn ich das mache, geht die Performance allerdings richtig in die Knie. Beim Füllen des DataGridView kann ich das evtl. noch akzeptieren, aber beim (horizontalen) Scrollen geht dann gar nichts mehr voran.

    Kann man etwas dagegen machen?

    Mittwoch, 7. Juli 2010 15:08

Antworten

  • Hallo,

    darauf verzichten!

    Wie Du bei Empfohlene Vorgehensweisen für das Skalieren des DataGridView-Steuerelements in Windows Forms
    nachlesen kannst, wird von solchem Vorgehen abgeraten, weil das DataGridView dort nur Brute Force vorgehen
    kann und über alle Zeilen in der Spalte iterieren muß. Was neben dem Abruf auch die notwendige Formatierung
    beinhaltet.

    Wenn Deine Daten wie aus den vorherigen Fragen zu vermuten aus einer Datenbank stammen,
    so hast Du die Informationen bezüglich der Länge von Spalten im wesentlichen schon vorliegen
    bzw. kannst sie Dir über die Tabellendefinitionen beschaffen.
    Darüber kann man die Längen annäherungsweise bestimmen und das sollte im Normalfall ausreichend sein.

    Gruß Elmar

     

     

    • Als Antwort markiert SPDeveloperXP Mittwoch, 7. Juli 2010 15:26
    Mittwoch, 7. Juli 2010 15:15
    Beantworter

Alle Antworten

  • Hallo,

    darauf verzichten!

    Wie Du bei Empfohlene Vorgehensweisen für das Skalieren des DataGridView-Steuerelements in Windows Forms
    nachlesen kannst, wird von solchem Vorgehen abgeraten, weil das DataGridView dort nur Brute Force vorgehen
    kann und über alle Zeilen in der Spalte iterieren muß. Was neben dem Abruf auch die notwendige Formatierung
    beinhaltet.

    Wenn Deine Daten wie aus den vorherigen Fragen zu vermuten aus einer Datenbank stammen,
    so hast Du die Informationen bezüglich der Länge von Spalten im wesentlichen schon vorliegen
    bzw. kannst sie Dir über die Tabellendefinitionen beschaffen.
    Darüber kann man die Längen annäherungsweise bestimmen und das sollte im Normalfall ausreichend sein.

    Gruß Elmar

     

     

    • Als Antwort markiert SPDeveloperXP Mittwoch, 7. Juli 2010 15:26
    Mittwoch, 7. Juli 2010 15:15
    Beantworter
  • Ok, danke!
    Mittwoch, 7. Juli 2010 15:27
  • Hallo SP,

    da Du das beim Füllen akzeptieren kannst, ist es absolut kein Problem und Du brauchst nicht darauf zu verzichten.
    Man kann zum Beispiel den Modus anfangs setzen, und nach der Berechnung zurücknehmen, um dann die Width manuell setzen zu können:

      dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCellsExceptHeader;
      foreach (DataGridViewColumn dgc in dgv.Columns)
        dgc.Tag = dgc.Width;
      dgv.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.None;
      foreach (DataGridViewColumn dgc in dgv.Columns)
        dgc.Width = (int)dgc.Tag;
    

    So hat man auch den Vorteil, ggf. weiter manuell die Spalten-Breiten setzen zu können.
    Wieviel Zeilen und Spalten hast Du denn im DataGridView?

     


    ciao Frank
    Mittwoch, 7. Juli 2010 16:00