![]() |
prüfen ob alle stringgrid zellen einen wert haben
hallo
ich stehe vor einem problem. ich will nachprüfen ob alle zellen in einer stringgrid belegt sind, also <>''. ich habe schon die forensuche befragt, aber die konnte mir auch nicht weiterhelfen. ich hoffe ihr könnt es. danke schonmal im voraus! |
Re: prüfen ob alle stringgrid zellen einen wert haben
Ein Stringgrid hat RowCount, ColCount, Row und Col. Natürlich auch Cells. Und was eine for-Schleife ist, das muß man auch wissen. Rest ist Kleinigkeit.
|
Re: prüfen ob alle stringgrid zellen einen wert haben
Mahlzeit :-D ...,
ich behaupte mal das Du das auch kannst, wenn Du ein wenig logisch überlegst und die OH zur Hilfe nimmst! mal aus dem Stehgreif ungetestet
Delphi-Quellcode:
Gruss Mario
var IRow, ICol: Integer;
begin with StringGrid do begin for IRow:= 0 to RowCount do for ICol:= 0 to ColCount do if Cells[ICol, IRow] = '' then begin // hier muss Dein eigener Code rein end; end; end; [add] :shock: Tzz, Delphi 7 Enterprise und solche Fragen |
Re: prüfen ob alle stringgrid zellen einen wert haben
Hallo,
hier mal meine Variante:
Delphi-Quellcode:
StringGrid1.Rows[z].IndexOf('') gibt den Index der ersten leeren Zelle zurück,
for z := 0 to StringGrid1.RowCount-1 do
if StringGrid1.Rows[z].IndexOf('') <> -1 then showmessage('In Zeile '++' leere Zelle gefunden'); wenn alle Zellen der Zeile einen String enthalten wird -1 zurückgegeben. |
Re: prüfen ob alle stringgrid zellen einen wert haben
richtig. auf das mit der schleife bin ich auch schon gekommen. aber ich will ja nicht nachprüfen ob eine zelle einen leerstring besitzt, sondern ob wirklich alle zellen in der stringgrid voll sind.
trotzdem danke! ich habe mittlerweile eine andere möglichkeit gefunden. ich zähle einfach mit wie oft werte in die stringgrid geschrieben werden. wenn es dann die zellenanzahl ergibt kann ich dann meine procedure ausführen. |
Re: prüfen ob alle stringgrid zellen einen wert haben
Hallo,
Zitat:
|
Re: prüfen ob alle stringgrid zellen einen wert haben
Hi.
So funktioniert es auch, wenn Spalten- und Reihentitel verwendet werden - gesucht wird von links nach rechts, dann von oben nach unten:
Delphi-Quellcode:
Grüße vom marabu
function FindEmptyCell(sg: TStringGrid; var gc: TGridCoord): boolean;
var iRow, iCol: Integer; begin gc.X := -1; gc.Y := -1; Result := false; with sg do for iRow := FixedRows to Pred(RowCount) do for iCol := FixedCols to Pred(ColCount) do if Cells[iCol, iRow] = '' then begin gc.X := iCol; gc.Y := iRow; Result := true; Exit; end; end; |
Re: prüfen ob alle stringgrid zellen einen wert haben
Hallo,
na dann, meine Variante mit Berücksichtigung eventueller Spalten- und Zeilentitel :wink:
Delphi-Quellcode:
for z := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
if StringGrid1.Rows[z].IndexOf('') >= FixedCols then showmessage('In Zeile '++' leere Zelle gefunden'); |
Re: prüfen ob alle stringgrid zellen einen wert haben
Hallo Lannes,
bei gruppierten Daten ist FixedCols > 1 und die erste Spalte oft leer. Die Methode IndexOf() kann damit leider nicht umgehen. Normalerweise bevorzuge ich wegen der LOC Metrik deine Variante, aber für meine CodeLib muss die Funktion eine ausreichend hohe Wiederverwendbarkeit besitzen. Freundliche Grüße vom marabu |
Re: prüfen ob alle stringgrid zellen einen wert haben
Hallo marabu,
richtig, dann kann ich mit Cols[z].IndexOf('') den Datenbereich überprüfen:
Delphi-Quellcode:
Sollten sich auch innerhalb der FixedRow-Zeilen leere Zellen befinden,
for z := StringGrid1.FixedCols to StringGrid1.ColCount-1 do
if StringGrid1.Cols[z].IndexOf('') >= StringGrid1.FixedRows then showmessage('In Spalte '+IntToStr(z)+' leere Zelle gefunden'); muss/kann man deinen Ansatz verwenden, oder die leeren Zellen innerhalb der Fixspalten und -zeilen mit einem Leerzeichen belegen. Um die Wiederverwendbarkeit noch zu erhöhen, z.B. wenn nur ein Teil-Bereich der eigentlichen Daten geprüft werden soll, schlage ich folgende Funktion(in Anlehnung an Deine) vor:
Delphi-Quellcode:
Aufrufbeispiel:
function FindEmptyCell_X(sg: TStringGrid; var gr: TGridRect): boolean;
var c,r : integer; begin Result := False; with sg do for c := gr.Left to gr.Right do for r := gr.Top to gr.Bottom do if Cells[c,r] = '' then begin gr := TGridrect(Rect(c,r,c,r)); Result := True; Exit; end; end;
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var gr : TGridRect; begin with StringGrid1 do begin //aufruf mit Bereichsangabe gr := TGridRect(Rect(3,2,ColCount-2,RowCount-2)); //oder auch //gr := Selection; if FindEmptyCell_X(StringGrid1,gr) then begin Selection := gr; showmessage('Es fehlen Daten in der markierten Zelle'); end else showmessage('Daten sind vollständig'); end; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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 by Thomas Breitkreuz