AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Stringgrid "schnell" beladen

Ein Thema von QuickAndDirty · begonnen am 29. Jun 2009 · letzter Beitrag vom 29. Jun 2009
Antwort Antwort
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
2.057 Beiträge
 
Delphi 12 Athens
 
#1

Re: Stringgrid "schnell" beladen

  Alt 29. Jun 2009, 08:27
Virtueller Modus ? Hört sich vielversprechend an, aber ich glaube das hat es nicht.

so befülle ich es aktuell:
Delphi-Quellcode:
    oldvisible := visible;
    visible := false;
    j := 1; // Zeile Zahler initialisieren
    RowCount := 2; // Zeilen Anzahl ist 2 ,weniger geht nicht
    Protokoll := Protokoll + 'RowCount := ...init'#13#10;
    DataSet.first;
    While not DataSet.EOF do //bis das ende der datenmenge erreicht ist...
    begin
      try
        For i := 0 to FNames.Count - 1 do // für alle Spalten...
          try
            Cells[Anfang + i, j] := DataSet.Fields[i].asString; //..werte eintragen, Anfang = erste spalte( ?0 / 1?)
          except
            on E:Exception do
              raise EXception.create(e.Message + #13#10
              + 'ThisRow: CELL=' + inttostr(Anfang+i) + ',' + inttostr(j) + #13#10
              + 'Anfang bei=' + inttostr(Anfang) + #13#10
              + 'Recordcount=' + inttostr(Dataset.RecordCount) + #13#10
              + 'Zeilenanzahl=' + inttostr(Rowcount));
          end;
        DataSet.Next;


        if not DataSet.eof then// Wenn noch mehr daten vorhanden..
        begin //..dann schaffe platz
          Inc(j); //erhöhe Zeilen zähler (spalte 0 enthält die Überschriften)
          RowCount := succ(j); // dann Zeilen anzahl mit erhöhen;
        end;


      except
        on E:Exception do
          raise EXception.create(e.Message + 'DS-Loop position='+inttostr(j)+'Zeilenanzahl= '+inttostr(Rowcount));
      end;
    end;
    Visible := oldvisible;
  except
    on e:Exception do
      raise exception.Create(Self.Name + '.LoadFromDataSet' + #13#10 + Protokoll + #13#10 + e.Message);
  end;
Nachteil ist, dass ein Dialog auf dem das drauf liegt tooootal lange lädt wenn extrem viele Datensätze in das Gitter kommen.
Ich habe mir schon überlegt ob ich das befüllen des Gitters in einem Hintergrund Thread ausführe...aber leider geht das mit Datenbanken multithreaded ja nicht sooo toll...
...ab einer gewissen Anzahl macht so ein Ladebalken schon fast wieder Sinn....
Andreas
Nobody goes there anymore. It's too crowded!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:55 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz