Combobox im DBGrid

Rund um die LCL und andere Komponenten
khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Combobox im DBGrid

Beitrag von khh »

hallo zusammen,
gibts so was wie ne Combobox im DBgrid , die als Nachschlagefeld verwendet werden kann.
Die Suche im Netz bringt zwar einige Artikel, aber ich hab bis jetzt noch keine braucbare Lösung gefunden.



Danke Gruss KH

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Combobox im DBGrid

Beitrag von theo »

Könnte prinzipiell schon klappen.
Grundsätzlich etwa so:

Code: Alles auswählen

procedure TForm1.DBGrid1SelectEditor(Sender: TObject; Column: TColumn;
  var Editor: TWinControl);
var  R:TRect;
begin
  R := StringGrid1.CellRect(DBGrid1.Col, DBGrid1.Row);
  Editor:=ComboBox1;
  Editor.Show;
  Editor.SetBounds(R.Left,R.Top,R.Right-R.Left,R.Bottom-R.Top);
end;
Da musst du aber einiges noch "zu Fuss" weiter programmieren.

EDIT: Nö, sorry, Beispiel ist von einem TStringGrid abgeleitet, mit TDBGrid kenne ich mich nicht aus.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

theo hat geschrieben:Könnte prinzipiell schon klappen.
Grundsätzlich etwa so:

Code: Alles auswählen

procedure TForm1.DBGrid1SelectEditor(Sender: TObject; Column: TColumn;
  var Editor: TWinControl);
var  R:TRect;
begin
  R := StringGrid1.CellRect(DBGrid1.Col, DBGrid1.Row);
  Editor:=ComboBox1;
  Editor.Show;
  Editor.SetBounds(R.Left,R.Top,R.Right-R.Left,R.Bottom-R.Top);
end;
Da musst du aber einiges noch "zu Fuss" weiter programmieren.

EDIT: Nö, sorry, Beispiel ist von einem TStringGrid abgeleitet, mit TDBGrid kenne ich mich nicht aus.
ich danke dir,
ich werds mit einem dbgrid versuchen, notfalls nehm ich eben ein stringgrid und bestücke es _von hand_

Gruss KH

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Combobox im DBGrid

Beitrag von theo »

Wenn du's sowieso "von Hand" machen willst, gibt es auch noch den Virtual Treeview.
Damit kann man so ziemlich alles machen. Benötigt aber etwas Einarbeitung.

Demo Bilder:
http://www.soft-gems.net/index.php?opti ... &Itemid=33" onclick="window.open(this.href);return false;
Download für Lazarus:
http://www.lazarusforum.de/viewtopic.php?p=24598#p24598" onclick="window.open(this.href);return false;

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

theo hat geschrieben:Wenn du's sowieso "von Hand" machen willst, gibt es auch noch den Virtual Treeview.
Damit kann man so ziemlich alles machen. Benötigt aber etwas Einarbeitung.

Demo Bilder:
http://www.soft-gems.net/index.php?opti ... &Itemid=33" onclick="window.open(this.href);return false;
Download für Lazarus:
http://www.lazarusforum.de/viewtopic.php?p=24598#p24598" onclick="window.open(this.href);return false;
ich danke dir, werd ich mir anschauen.

Gruss KH

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Combobox im DBGrid

Beitrag von Christian »

Wiso macht ihr euch das leben so schwer, jedes Column vom DBGrid hat ne Picklist wenn da werte drin stehn zeigt das dbGrid von sich aus schon ne combobox als inplace Editor an.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Combobox im DBGrid

Beitrag von theo »

Christian hat geschrieben:Jedes Column vom DBGrid hat ne Picklist wenn da werte drin stehn zeigt das dbGrid von sich aus schon ne combobox als inplace Editor an.
Genial ;-) Ich sagte ja, mit TDBGrid kenne ich mich nicht aus. Ich dachte das wäre TStringGrid sehr änhnlich.

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

Christian hat geschrieben:Wiso macht ihr euch das leben so schwer, jedes Column vom DBGrid hat ne Picklist wenn da werte drin stehn zeigt das dbGrid von sich aus schon ne combobox als inplace Editor an.
so was hab ich gesucht, ich dachte das funkt nur mit Delphi ;-)

EDIT: wie komme ich an die Picklist ran, mein Grid wird zur Laufzeit erzeugt.

Danke euch

Gruss KH

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Combobox im DBGrid

Beitrag von Christian »

for i := 0 to ComumnCount-1 do if Column[i.FieldName = 'MEINFELDNAME' then Column.Picklist.Add('Blähungen');
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

ich danke euch

der Kompiler nimmt es widerstandslos ;-),
aber leider passiert nix beim Klick aufs Grid :-(


ich habe :
self.Columns[0].ButtonStyle := cbsPicklist; und:
self.ScrollBars:= ssAutoBoth;
self.options:= [dgEditing,dgTitles,dgRowSelect]; gesetzt aber eine Bearbeitung im Grid ist nicht möglich
Welche Schalter müssen noch gesetzt werden?


Gruss KH

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Combobox im DBGrid

Beitrag von Christian »

Es müssen Einträge in der Picklist vorhanden sein
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

Christian hat geschrieben:Es müssen Einträge in der Picklist vorhanden sein
habs jetzt hinbekommen, vielen Dank.

Gruss KH

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: Combobox im DBGrid

Beitrag von piper62 »

Die Picklist ist solange OK bis man im Vordergrund für den Nutzer andere Daten anzeigen möchte als im Hintergrund in die DB geschrieben werden sollen.
Z.B. bei einer Nachschlagetabelle bei der man in der Zieltabelle nur die Fremdschlüssel Information der Nachschlagetabelle übernehmen möchte.

Für solche Zwecke nehme ich immer eine Combobox die dann über die entsprechende Spalte beim Bearbeiten oder Einfügen eines Datensatzes angezeigt wird.
Falls so etwas gebraucht wird einfach melden, ich müsste dazu mal Beispielcode zusammenstellen.

Gruss

khh
Beiträge: 489
Registriert: Sa 5. Apr 2008, 09:37
OS, Lazarus, FPC: Win Vista,Win 7 (L 0.9.29 FPC 2.4.1)
CPU-Target: 32Bit /64 Bit
Wohnort: Nähe Freiburg i.Br.

Re: Combobox im DBGrid

Beitrag von khh »

piper62 hat geschrieben:Die Picklist ist solange OK bis man im Vordergrund für den Nutzer andere Daten anzeigen möchte als im Hintergrund in die DB geschrieben werden sollen.
Z.B. bei einer Nachschlagetabelle bei der man in der Zieltabelle nur die Fremdschlüssel Information der Nachschlagetabelle übernehmen möchte.

Für solche Zwecke nehme ich immer eine Combobox die dann über die entsprechende Spalte beim Bearbeiten oder Einfügen eines Datensatzes angezeigt wird.
Falls so etwas gebraucht wird einfach melden, ich müsste dazu mal Beispielcode zusammenstellen.

Gruss
genau dies soll der Zweck sein.
ich habe das jetzt mal so umgesetzt, indem ich eine Klasse Kundenliste erstelle und in einer Schleife einlese.

self.Columns[0].PickList.AddObject(Tkunde(Fkundenlist.items).Firma, Tkunde(Fkundenlist.items));

Bin aber gerne für andere Lösungen empfänglich.

Gruss KH

piper62
Beiträge: 131
Registriert: Sa 5. Apr 2008, 17:57
OS, Lazarus, FPC: Linux (Debian, Xubuntu), MacOS X, MS Win, Android, Web
CPU-Target: 32Bit/64Bit
Wohnort: Ulm

Re: Combobox im DBGrid

Beitrag von piper62 »

ich habs mit der neuen Lazarus Version nicht mehr getestet aber bislang kam ich an den Picklist ItemIndex nicht dran.
Daher habe ich immer eine richtig ComboBox als floating Object über die entsprechende Column gelegt.
Gut ist daran, dass es natürlich mit beliebigen Objekten geht und daher mehr Gestaltungsmöglichkeiten existieren.

Etwas mehr Aufwand gibt es dann bei der Bearbeitung der DB-Events, z.B. OnNewRecord: hier dann den ForeignKey eintragen oder beim Editieren eines Datensatzes.

Antworten