und schonwieder mein lieblings Thema
das liebe DB Grid
also ich habe das nach meinen Bedürfnissen etwas angepasst und vererbe es eigentlich nur noch
nun kann es aber vorkommen das ich es auf eine Form packe und vorher war es noch auf einer andereren Form
nun sind aber noch viele leere Columns drin
die würde ich natürlich gerne raus haben
Ich kenne mich mit der Komponente nicht aus. Aber vielleicht gibt es ein Columns.Clear?
Übrigens, sollte die Delete-Schleife von (DBGrid1.Columns.Count -1) beginnend Rückwärts (downto) noch 0 laufen - sonst gibt es einen Zugriffsfehler.
Also zuerst sah es für mich auch so aus, als müsste es funktionieren. Aber dann fiel mir ein, wir reden (bzw. schreiben) hier ja von Datenbank-Grids? Da hatte ich auch mal so meine Probleme gehabt, weil die DBGrid ja meist jene Colums (und Rows) darstellt, die von der DataSource (glaube, diese ist es) übermittelt wird, bzw. letztendlich von der Datenbank selbst übermittelt bekommt. Deshalb klappt es bei DBGrid nicht. Man kann nur dies in so weit ändern, ob die Columns angezeigt werden soll, oder nicht. Ansonsten muss (und kann) man bei DataSource eingreifen, glaube ich. Weiß es leider auch nicht mehr so genau. Schon lange her. Aber eine Änderung in der Richtung würde dann auch dazu führen, dass die Datenbank selbst ebenfalls bearbeitet/geändert wird.
Ist aber, wie gesagt, lange her. Kann sein, dass ich mich da ein wenig falsch erinnere. Vielleicht ist es auch nicht DataSource, sondern DataSet? Aber in einem bin ich mir ziemlich sicher: DBGrid lässt sich zumindest ab dann, wenn es erst mal mit einer Datenbank verbunden ist, nicht so leicht ändern wie eine einfache StringGrid.
Beim Löschen über Indices ist die Grundregel, die Schleife immer von oben nach unten laufen zu lassen (for...downto). Im umgekehrten Fall (for ... to) beginnst du mit dem Löschen der Spalte mit dem Index 0, die Spalte 1 rutscht an die Position 0, der Schleifenindex erhöht sich auf 1, aber auf IndexPosition 1 ist nun die Spalte mit dem ursprünglichen Index 2 usw. --> es bleibt die Hälfte der Spalten vorhanden! Wenn du dagegen von oben nach unten löschst, kann nichts "nachrutschen":
for i:= DBGrid.Columns.Count-1 downto 0 do
DBGrid.Columns.Delete(i);
// oder ganz ohne Laufindex immer das aktuell erste Element löschen
while DBGrid.Columns.Count > 0 do
DBGrid.Columns.Delete(0);
Dazu kommt noch, dass die Spalten eines DBGrids nicht autark sind wie in einem StringGrid, sondern von der darunterliegenden Tabelle abhängen. Ich könnte mir vorstellen, dass die Tabelle von dem Löschen der Gridspalten nichts mitkriegt und daher die Spalten bei der nächsten Gelegenheit wieder herstellt. --> Mit persistenten Feldern arbeiten?
Zuletzt geändert von wp_xyz am Mo 1. Aug 2016, 09:43, insgesamt 1-mal geändert.