Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi DBGrid ausgewähltes Feld vorne anzeigen (https://www.delphipraxis.net/108950-dbgrid-ausgewaehltes-feld-vorne-anzeigen.html)

Smiley 21. Feb 2008 16:33

Datenbank: Access • Zugriff über: ADO

DBGrid ausgewähltes Feld vorne anzeigen
 
Ich versuche einen Suchdialog zu programmieren.
Dabei wird In einer EditBox der Suchbegriff eingegeben und in aus einer ComboBox wird das Feld ausgewählt in dem gesucht werden soll.
Benutzt wird Eine ADOConnection,eine Query und eine Datasource.
Im Query mache ich meine Selektion und diese Datensätze werden dann im DBGrid angezeigt.
Soweit so gut.
Jetzt soll aber das zum suchen ausgewählte Feld soll in der ersten Spalte im Grid stehen, die anderen Felder sollen aber auch noch angezeigt werden.
Eventuell kann das auch mit 2 DBGrids gemacht werden, wenn es zu kompliziert ist.
Eines nur für den Suchbegriff und eines für die ganze Tabelle.

Jetzt meine Frage:
1. wie mache ich das am sinnvollsten.
2. Soll ich Persistente Felder für das DBGrid benutzen oder geht es ohne zuviel Aufwand auch ohne. (etwa 90 Felder).
3. Geht es mit einem Grid oder brauche ich 2.

Für ein paar hilfreiche Quellcodezeilen wäre ich dankbar. (speziell für das ansprechen des DBGrid für die Spalten-Umsetzung und Ein- und -Ausblendung)
Mit einem Link auf einen passenden Bericht bin ich auch schon zufrieden.

shmia 21. Feb 2008 16:40

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Zitat:

Zitat von Smiley
Jetzt soll aber das zum suchen ausgewählte Feld soll in der ersten Spalte im Grid stehen, die anderen Felder sollen aber auch noch angezeigt werden.

Du kannst das Feld über das Setzen des Index in die 1. Spalte bringen:
Delphi-Quellcode:
Query.FieldByName(suchfeldname).Index := 0;

Smiley 21. Feb 2008 16:42

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Wenn das so einfach ist, warum weiß ich das dann nicht ...grübel ...grübel

shmia 21. Feb 2008 16:44

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Zitat:

Zitat von Smiley
Wenn das so einfach ist, warum weiß ich das dann nicht ...grübel ...grübel

Weil du ein armes Smiley bist. :stupid: :stupid: :stupid:

Smiley 21. Feb 2008 16:54

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Mann o Mann, da denk ich mir die tollsten Variationen aus und dann ist das so einfach.

Aber ganz so leicht lass ich noch nicht locker.

Im Prinzip funktioniert das ja Prima, aber wenn ich den Befehl das zweite mal anwende, dann verschiebt es mir die ganze Reihenfolge,
da dann das zuletzt angewählte Feld nun an zweiter Stelle steht und nicht wieder an seinem alten Platz.
Die erste Spalte könnte ruhig immer überschrieben werden, da steht nur die ID drin, die muss man nicht sehen.

Das ist doch jetzt nicht etwa wieder so einfach ... oder???



P.S. mit welchem Befehl blende ich Felder aus im Grid ?

sx2008 22. Feb 2008 02:47

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Mit Table1.FieldByName('Testfeld').Visible := False kann man ein Feld im Grid unsichtbar machen.

marabu 22. Feb 2008 09:10

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Hallo Smiley,

das Verschieben eines Feldes im Gitter kannst du über eine private Methode organisieren:

Delphi-Quellcode:
procedure TDemoForm.Promote(ds: TDataSet; const fieldName: string);
var
  f: TField;
begin
  if (PromotedIndex > 0) and (PromotedIndex < ds.FieldCount) then
  begin
    ds.Fields[0].Index := PromotedIndex;
    PromotedIndex := 0;
  end;
  if fieldName <> '' then
  begin
    f := ds.Fields.FieldByName(fieldName);
    PromotedIndex := f.Index;
    f.Index := 0;
  end;
end;
PromotedIndex ist dabei eine private Variable vom Typ Integer, in der die alte Position des Feldes gespeichert wird.

Freundliche Grüße

Smiley 22. Feb 2008 19:51

Re: DBGrid ausgewähltes Feld vorne anzeigen
 
Danke Marabu
das ist eine ziemlich effiziente Methode, ich hätte nicht gedacht, das sowas funktionieren kann.
Erst wird das erste Feld auf seine alte Position gebracht, wobei ich schon die Befürchtung hatte,dass dabei der alte Index ja nicht mehr stimmt, da doch schon alles durch den letzten Einfügeakt verschoben wurde. Dann verschiebt sich durch das Einfügen an der alten Stelle ja auch wieder alles hinter dieser Stelle.
Dann nehme ich aus der Liste wieder irgendwo was raus und schiebe es vorne rein, dann verschieben sich wieder alle Felder.
Dass das ganze gut geht hätte ich nicht erwartet, aber wenn Du es schreibst muss es funktionieren.
Das ist genau das was ich haben wollte, nochmals vielen Dank.


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