Einzelnen Beitrag anzeigen

QuickAndDirty

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

Re: Stringgrid "schnell" beladen

  Alt 29. Jun 2009, 09: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
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat