Delphi-PRAXiS

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 ???

stifflersmom 8. Jan 2009 10:51

Re: DBgrid anpassen
 
Listindex(23) out of Bounds.

Überprüfe vor dem Start Deiner Schleife wieviele Elemente im zu löschenden Bereich sind,
und starte dann Deine "Säuberungsaktion"...

Moin

DeddyH 8. Jan 2009 10:53

Re: DBgrid anpassen
 
Du willst nur die ersten 3 Spalten haben?
Delphi-Quellcode:
for i := self.Columns.Count - 1 downto 3 do
  self.Columns.Delete(i);

BackOrifice 8. Jan 2009 11:00

Re: DBgrid anpassen
 
Warum holst du dir die benötigten Spalten nicht einfach direkt hartkodiert in der Abfrage?
Zbs.

SQL-Code:
SELECT t.anfang, t.ende, ti.titel
FROM termin t, termin_inhalt ti
WHERE t.inhalt_id = ti.inhalt_id
ORDER BY t.anfang
Damit hast du nur die Spalten die benötigt werden und musst nicht erst welche anlegen und danach die rauslöschen, die du gar nicht haben willst. Stichwort Effizenz und so (auch von der Abfragegeschwindigkeit und des Datenvolumens auf dem SQL Server).

khh 8. Jan 2009 11:00

Re: DBgrid anpassen
 
Zitat:

Zitat von stifflersmom
Listindex(23) out of Bounds.

Überprüfe vor dem Start Deiner Schleife wieviele Elemente im zu löschenden Bereich sind,
und starte dann Deine "Säuberungsaktion"...

Moin

ok, funktioniert so, die Felder die ich nicht brauche werden nicht mehr angezeigt.

Das Problem mit dem scrollen der Spalten nach links und einer leeren Spalte rechts bleibt trotzdem.
Wie kann ich das verhindern?



Gruss KH

ConstantGardener 8. Jan 2009 12:03

Re: DBgrid anpassen
 
Hallo khh,

ich vermute mal die Skalierung der Spalten stimmt nicht. Siehst Du unten eine Scrollbar? Ja? Dann sind deine Spalten zu breit. Nimm zum Skalieren mal nicht Width sondern ClientWidth. Da sind die Rahmen und Scrollbalken schon rausgerechnet.

cg

khh 8. Jan 2009 12:15

Re: DBgrid anpassen
 
Zitat:

Zitat von ConstantGardener
Hallo khh,

ich vermute mal die Skalierung der Spalten stimmt nicht. Siehst Du unten eine Scrollbar? Ja? Dann sind deine Spalten zu breit. Nimm zum Skalieren mal nicht Width sondern ClientWidth. Da sind die Rahmen und Scrollbalken schon rausgerechnet.

cg

ok, werd ich versuchen, ich danke dir .

Gruss KH


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:23 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