![]() |
Sichtbarkeit von Tabellenfeldern
Hallo,
Ich habe die Sichtbarkeit aller Felder aller Tabellen in einer weiteren sog. Konfigurationstabelle abgelegt. Soll jetzt der Inhalt einer Tabelle in einem DBGrid angezeigt werden, so lade ich erst alle Daten der betreffenden Tabelle über eine Query in ein Dataset:
Delphi-Quellcode:
Anschließend lese ich aus der Konfigurationstabelle das Attribut für die Sichtbarkeit der Felder dieser Tabelle:
Query.sql.add('SELECT * FROM Tabelle');
Delphi-Quellcode:
Das Attribut "visability" ist ein String der Form: '001010011011'. Die Sichtbarkeit wird jedem Feld im Dataset über die Schleife zugeordnet. So weit klappt das auch.
...
for i:=0 to Datasource.DataSet.FieldCount-1 do begin Datasource.DataSet.Fields[i].Visible:= visability[i+1]='1'; Datasource.DataSet.Next; end; Will ich jetzt ebenfalls zur Laufzeit das Grid mit der Datasource verbinden, mache ich das folgende:
Delphi-Quellcode:
Leider sind immer alle Felder sichtbar!? Wo ist mein Fehler?
...
with Grid do begin for ColCount:=0 to DataSource.DataSet.FieldCount-1 do Fields[ColCount].Visible:= DataSource.DataSet.Fields[ColCount].Visible; end; Danke und Gruß, Barnti |
Re: Sichtbarkeit von Tabellenfeldern
Ich habe dazu noch folgendes:
Zitat:
Danke und Gruß, Barnti |
Re: Sichtbarkeit von Tabellenfeldern
Hi,
bisher leider noch keine Antwort :( . Daher dieser 'Nachhaker': Hat die Darstellung von Feldern im Dataset und schließlich im Grid etwas mit persistenten Feldern zu tun? Heißt das, ich muss die Felder zur Laufzeit hinzufügen und nicht automatisch alle Felder übernehmen? Ich habe keine Erfahrung mit diesem Thema. Gruß, Barnti |
Re: Sichtbarkeit von Tabellenfeldern
Zitat:
Also einfach
Delphi-Quellcode:
Das wars schon. oder hast du vorher dem Grid Felder zugeordnet?
Grid.DataSource:=nil;
Grid.DataSource:=DataSource; |
Re: Sichtbarkeit von Tabellenfeldern
Hi,
ich habe mittlerweile, nach langem Suchen, die Antwort gefunden. Will man die Eigenschaften eines Feldes nutzen, so muss man persistente Felder für ein Dataset erzeugen. Nutzt man die Felder dynamisch, soll heißen man öffnet einfach die Query, so werden alle Felder automatisch erzeugt. Damit bleiben aber viele Eigenschaften nicht nutzbar. Fügt man die Felder als persistent hinzu kann man Eigenschaften, wie 'readonly', 'visible' und 'CustomConstraint' nutzen und diese einfach an andere Elemente weitergeben. schnipp
Delphi-Quellcode:
schnapp
procedure TDM_Database.CreatePersistentFields(Datasource: TDatasource);
var i: Integer; begin Datasource.DataSet.Open; for i := 0 to Datasource.DataSet.FieldDefs.Count -1 do begin Datasource.DataSet.Close; Datasource.DataSet.FieldDefs.Items[i].CreateField(self); end; end; // Gefunden in DP-Suche: Persistente Felder Dann funktioniert auch Dein Vorschlag problemlos: einfach DBGrid mit Datasource verbinden. Die Eigenschaften der Felder sind dieselben. Damit können die Eigenschaften der Felder im DBGrid benutzt werden. Danke für Deine Mühe, Gruß, Barnti |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:49 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-2025 by Thomas Breitkreuz