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....