AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi prüfen ob alle stringgrid zellen einen wert haben
Thema durchsuchen
Ansicht
Themen-Optionen

prüfen ob alle stringgrid zellen einen wert haben

Ein Thema von droppi · begonnen am 26. Jan 2006 · letzter Beitrag vom 27. Jan 2006
Antwort Antwort
Seite 1 von 2  1 2      
droppi
(Gast)

n/a Beiträge
 
#1

prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 10:18
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!
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#2

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 10:55
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.
Gruß
Hansa
  Mit Zitat antworten Zitat
Hobby-Programmierer

Registriert seit: 19. Jan 2006
Ort: München
392 Beiträge
 
Delphi XE Starter
 
#3

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 11:24
Mahlzeit ...,

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:
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;
Gruss Mario

[add]
Tzz, Delphi 7 Enterprise und solche Fragen
Mario
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#4

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 15:09
Hallo,

hier mal meine Variante:
Delphi-Quellcode:
for z := 0 to StringGrid1.RowCount-1 do
  if StringGrid1.Rows[z].IndexOf('') <> -1 then
    showmessage('In Zeile '++' leere Zelle gefunden');
StringGrid1.Rows[z].IndexOf('') gibt den Index der ersten leeren Zelle zurück,
wenn alle Zellen der Zeile einen String enthalten wird -1 zurückgegeben.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
droppi
(Gast)

n/a Beiträge
 
#5

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 15:49
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.
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#6

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 16:30
Hallo,
Zitat von droppi:
...aber ich will ja nicht nachprüfen ob eine zelle einen leerstring besitzt, sondern ob wirklich alle zellen in der stringgrid voll sind.
wenn eine Zelle einen Leerstring besitzt, dann ist sie Leer, folglich sind nicht alle Zellen voll.
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#7

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 26. Jan 2006, 17:00
Hi.

So funktioniert es auch, wenn Spalten- und Reihentitel verwendet werden - gesucht wird von links nach rechts, dann von oben nach unten:

Delphi-Quellcode:
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;
Grüße vom marabu
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#8

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 27. Jan 2006, 00:03
Hallo,

na dann, meine Variante mit Berücksichtigung eventueller Spalten- und Zeilentitel
Delphi-Quellcode:
for z := StringGrid1.FixedRows to StringGrid1.RowCount-1 do
  if StringGrid1.Rows[z].IndexOf('') >= FixedCols then
    showmessage('In Zeile '++' leere Zelle gefunden');
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#9

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 27. Jan 2006, 07:11
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
  Mit Zitat antworten Zitat
Benutzerbild von Lannes
Lannes

Registriert seit: 30. Jan 2005
Ort: Münster
745 Beiträge
 
Delphi 3 Professional
 
#10

Re: prüfen ob alle stringgrid zellen einen wert haben

  Alt 27. Jan 2006, 10:50
Hallo marabu,

richtig, dann kann ich mit Cols[z].IndexOf('') den Datenbereich überprüfen:
Delphi-Quellcode:
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');
Sollten sich auch innerhalb der FixedRow-Zeilen leere Zellen befinden,
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:
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;
Aufrufbeispiel:
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;
MfG Lannes
(Nichts ist nicht Nichts) and ('' <> nil ) and (Pointer('') = nil ) and (@('') <> nil )
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 13:51 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz