Einzelnen Beitrag anzeigen

taaktaak

Registriert seit: 25. Okt 2007
Ort: Radbruch
1.990 Beiträge
 
Delphi 7 Professional
 
#31

Re: StringGrid Zeile per Mausclick auslesen

  Alt 10. Okt 2008, 07:05
Guten Morgen Michael.

Freut mich, dass ich dir schon etwas weiterhelfen konnte. Die Anzeige der überflüssigen Zeile im Grid ist logisch, da ich es im Code leider nicht berücksichtigt habe.

Das Grid verhält sich allerdings anders, als man vielleicht erwartet: Durch Verringerung von RowCount werden die Inhalte der reduzierten Zeilen nicht gelöscht. Vergrößert man RowCount anschließend wieder, werden die vermeintlich entfernten Zeileninhalte wieder angezeigt. Tatsächlich gelöscht werden Einträge mit "StringGrid.Rows[..].Clear".

In deinem konkreten Fall gibt es (wie fast immer) verschiedene Möglichkeiten, das gewünschte zu erreichen. Als "Hau-Ruck-Methode" könnte man vor dem erneuten Füllen des Grids alle vorhandenen Zeilen löschen, die Zeilenanzahl des Grids aber konstant lassen.

Delphi-Quellcode:
procedure RefillGrid;
var i : Integer;
begin
  assignfile(ChemDat,Dateiname);
  reset(ChemDat);

  with StringGrid1 do begin

    for i:=FixedRows to RowCount-1 do Rows[i].Clear; // löscht ALLE Zeilen
    // oder
    // RowCount:=RowCount-1; // alternativ

    for i:=1 to FileSize(ChemDat) do begin
      read(ChemDat,Chem);
      with Chem do begin
        Cells[1,i]:=IntToStr(BNum);
        Cells[2,i]:=Name;
        Cells[3,i]:=IntToStr(Bestand);
        Cells[4,i]:=Datum
        end
    end;
  closefile(ChemDat);
end;
Alternativ könnte die Zeilenanzahl immer exakt der Anzahl der Datensätze+FixedRows entsprechen, d.h. nach einer Löschoperation "RowCount:=RowCount-1". Ich mag es aber z.B. nicht, wenn weniger Gridzeilen gezeichnet werden, als bei der verfügbaren Höhe des Controls darstellbar wären. In diesem Fall füge ich immer eine entsprechende Anzahl von Leerzeilen ein - aber das ist Geschmackssache.

Mich würde mal interessieren, wieviele Datensätze in deinem Grid voraussichtlich gespeichert werden sollen. Spätestens, wenn du einige Tausend Datensätze im Grid sortieren oder filtern möchtest, wirst du die begrenzten Möglichkeiten des StringGrids an spürbar langen Sortierzeiten erkennen. Wenn derartige Größenordnungen bei dir anfallen, dann sollte das ganze entweder mit einer Datenbank gelöst oder die Datenspeicherung in einer Liste erfolgen und das Grid nur noch zur Anzeige der sichtbaren Daten genutzt werden.
Ralph
  Mit Zitat antworten Zitat