Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - Leere Zeilen aus Grid entfernen?
Alpha_Wolf - Di 19.07.05 10:03
Titel: Leere Zeilen aus Grid entfernen?
Hallo Leute,
Ich habe ein Grid in dem mehere Einträge angelegt werden. Wenn diese Einträge dann gespeichert werden wird vorher einiges überprüft darunter auch ob sich leere Zeilen in diesem Grid befinden wenn ja dann werden diese gelöscht.
Ich habe bereits eine kleine Funktion vor längerer Zeit geschrieben doch der Fehler im Code ist offensichtlich.. Es wird nur eine einzige Zeile gelöscht und danach nichts mehr da ja lCounter und/oder lRowCount bereits über der Anzahl der Zeilen sind.
Kann mir jemand sagen wie ich dann die Variablen bzw. die Schleife anpassen muss danmit er wirklich alle leeren Zeile herauslöscht? Hab grad die totale Denkblokade.. -.-
Hier mein Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| ... var lCounter: integer; lRowCount: integer; begin result := false; lCounter := 0; lRowCount := dxProjectGrid.RowCount; try for lCounter := 0 to lRowCount - 1 do begin if Assigned(dxProjectGrid.Items[lCounter]) then begin if (dxProjectGrid.Items[lCounter].Values[0] = '') and (dxProjectGrid.Items[lCounter].Values[1] = '') then begin dxProjectGrid.Items[lCounter].Destroy; end; end; end; result := true; lCounter := 0; except on E:Exception do begin aErrorStr := 'Fehler beim entfernen der leeren Zeilen aus dem ' + 'Grid zur Tätigkeitszuordnung' + #10#10 + 'Fehlerhafte Zeile: ' + IntToStr(lCounter + 1) + #10#13 + 'Windows-Fehlermeldung: ' + E.Message; end; end; end; .. |
Danke!
jasocul - Di 19.07.05 10:44
Mach es mit einem Downto.
Arno Nym - Di 19.07.05 10:47
Hi,
vielleicht geht's ja irgendwie so : (nich getestet, weiß auch nich was fürn Grid du da nimmst)
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8:
| For lcounter := dxProjectGrid.RowCount -1 Downto 0 do begin; if (dxProjectGrid.Items[lCounter].Values[0] = '') and (dxProjectGrid.Items[lCounter].Values[1] = '') then begin dxProjectGrid.Rows[lCounter] := dxProjectGrid.Rows[dxProjectGrid.RowCount -1]; dxProjectGrid.RowCount := sxProjectGrid.RowCount -1; end; end; |
Da das leere Objekt mit dem letzten getauscht wird geht allerdings eine eventuelle Sortierung flöten...naja wahrscheinlich gibs da auch noch irgendwo nen Haken...
viel Spaß beim rumtüfteln... :)
Moderiert von
raziel: Code- durch Delphi-Tags ersetzt.
Alpha_Wolf - Di 19.07.05 10:56
Hm.. downto ;) mann mann mann.. ich denk irgendwie manchmal zu kompliziert :lol:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| ... for lCounter := dxProjectGrid.RowCount downto 0 do begin if Assigned(dxProjectGrid.Items[lCounter]) then begin if (dxProjectGrid.Items[lCounter].Values[0] = '') and (dxProjectGrid.Items[lCounter].Values[1] = '') then begin dxProjectGrid.Items[lCounter].Destroy; end; end; ... |
@Arno Nym
Ich verwende die ExpressQuantumTreeList 3.2.2 die man allerdings auch als Grid verwenden kann. Grund dafür war das ich einen Footer brauchte und noch einige Dinge mehr.
Infos zur Komponente: [url]
http://www.devexpress.com[/url]
Dankeschön für die Hilfe :)
jasocul - Di 19.07.05 10:59
Bitte korrigieren:
Delphi-Quelltext
1:
| for lCounter := dxProjectGrid.RowCount-1 downto 0 do begin |
Da fehlt bei dir das "-1".
Alpha_Wolf - Di 19.07.05 11:08
Du hast recht 100%ig richtig ist es mit "-1". Werds auch so machen.
Ohne funktioniert es in diesem Fall auch..
EDIT:
ok funktioniert einwandfrei.. =) Danke nochmals
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!