Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   DBgrid anpassen (https://www.delphipraxis.net/127137-dbgrid-anpassen.html)

khh 8. Jan 2009 09:42

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

DBgrid anpassen
 
hallo zusammen,
ich habe ein dbgrid mit einer query verbunden.
Im Grid möchte ich nicht alle Felder der Query anzeigen.
Z.B brauche ich zwar die artikel_id, die soll aber nicht im Grid angezeigt werden.
Also habe ich mit :

self.columns[0].width := (self.width -20) div 3;
self.columns[1].width := (self.width -20) div 3;
self.columns[2].width := (self.width -20) div 3;

die Breite der Felder berechnet und mit :
TColumn(self.Columns[0]).Field:= FartikelQuery.FieldByName('artikelnummer'); usw.
die anzuzeigenden Felder definiert.

so habe ich 3 Felder der Datenmenge in der Anzeige, die die Breite des Grid auch komplett ausfüllen.

Leider springt das Grid beim Klick auf das letzte(dritte) Feld auf das 4te Feld der Datenmenge ,welches eigentlich nicht im Grid erscheinen soll., und die felder lassen sich per mausklick nach links scrollen.


die restlichen Einstellungend es Grid sind folgende:
self.ScrollBars:= ssAutoVertical;
self.options:= [dgEditing,dgTitles,dgRowSelect];

Wie kann ich das Grid auf die 3 Felder begrenzen und das Scrollen verhindern?

EDIT: eine unterschiedliche Spaltenbreite wäre in diesem Zusammenhang auch nicht schlecht.
Danke Gruss

KH

ConstantGardener 8. Jan 2009 09:54

Re: DBgrid anpassen
 
Hallo khh,

mit Doppelclick auf das Grid öffnet sich der Eintragseditor für das Grid. Hier kanst du die Spalten eintragen die dargestellt werden sollen, oder die löschen die nicht angezeigt werden sollen. Wenn hier nichts drin steht werden einfach alle angezeigt. Solltest Du den SQL-Text in der verbundenen Komponente drin haben kanst Du dier im Kontextmenü des Eintagseditors die Spalten automatisch eintragen lassen und die anderen dann löschen.

Du könntest auch dynamisch die Spalten auf visible:=false setzen. Stichwort Columns... des DBGrid

cu cg

khh 8. Jan 2009 09:57

Re: DBgrid anpassen
 
Zitat:

Zitat von ConstantGardener
Hallo khh,

mit Doppelclick auf das Grid öffnet sich der Eintragseditor für das Grid. Hier kanst du die Spalten eintragen die dargestellt werden sollen, oder die löschen die nicht angezeigt werden sollen. Wenn hier nichts drin steht werden einfach alle angezeigt. Solltest Du den SQL-Text in der verbundenen Komponente drin haben kanst Du dier im Kontextmenü des Eintagseditors die Spalten automatisch eintragen lassen und die anderen dann löschen.

Du könntest auch dynamisch die Spalten auf visible:=false setzen. Stichwort Columns... des DBGrid

cu cg

danke dir, dann muss ich wohl die ungewünschten Spalten explizit auf visible:= false setzen, da das Grid erst zur Laufzeit erzeugt wird.


Gruss KH

khh 8. Jan 2009 10:08

Re: DBgrid anpassen
 
ok, das mit der Anzeige verhindern funktioniert jetzt, indem ich die restlichen Felder mit:
self.columns[i].visible := false;


ausblende.

Leider springt die Anzeige beim Klick aufs Grid immer noch nach links.
Jetzt erscheint anstatt des nächsten DB-Feldes ein leeres Feld :-(

was kann ich noch einstellen?


Gruss KH

DeddyH 8. Jan 2009 10:11

Re: DBgrid anpassen
 
Lösch die nicht benötigten Felder doch einfach raus (DBGrid.Columns.Delete(Index)).

khh 8. Jan 2009 10:31

Re: DBgrid anpassen
 
mh, das ist jetzt schon komisch:
mit
Delphi-Quellcode:
 for i:= 3 to 24 - 1 do
   begin
      self.columns[i].visible := false;
   end;
werden die spalten nicht angezeigt , aber oben erwähnter effekt des scrollen tritt dennoch auf.


Mit:

Delphi-Quellcode:

 for i:= 3 to 24 - 1 do
  begin
       self.Columns.Delete(i) ;
  end;
bekomme ich den fehler:
List Index(14) out of bounds :-(


Warum denn 14 ?



Gruss KH

DeddyH 8. Jan 2009 10:40

Re: DBgrid anpassen
 
Löschen musst Du bei einer for-Schleife immer von hinten.
Delphi-Quellcode:
for i:= 23 downto 3 do
   begin
      self.Columns.Delete(i) ;
   end;

khh 8. Jan 2009 10:43

Re: DBgrid anpassen
 
Zitat:

Zitat von DeddyH
Löschen musst Du bei einer for-Schleife immer von hinten.
Delphi-Quellcode:
for i:= 23 downto 3 do
   begin
      self.Columns.Delete(i) ;
   end;

danke dir, warum denn das ?

dann bekomme ich :

List Index(23) out of bounds :-(

stifflersmom 8. Jan 2009 10:47

Re: DBgrid anpassen
 
Weil sich die Menge der zu löschenden Elemente beim Löschen reduziert.

khh 8. Jan 2009 10:48

Re: DBgrid anpassen
 
Zitat:

Zitat von stifflersmom
Weil sich die Menge der zu löschenden Elemente beim Löschen reduziert.

ok, aber warum jetzt out of bei 23 ???


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr.
Seite 1 von 2  1 2      

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