Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ComboBox im DBGrid (https://www.delphipraxis.net/64154-combobox-im-dbgrid.html)

Quake 28. Feb 2006 10:20

Datenbank: Firebird • Version: 1.5 • Zugriff über: IBX

ComboBox im DBGrid
 
Hallo,

ich bräuchte mal einen kleinen Denkanstoß.

Ich habe eine Auftrags-AuftragsArtikel Datenbank Konstruktion und eine Artikel Tabelle. Also 3 Tabellen

Auftrag -> Anschrift des Kunden
AuftragsArtikel -> Die Artikel des Auftrags
Artikel -> Artikeldaten z.B Bezeichnung und Preis

Die Auftragsartikel sollen in ein DBGrid eingegeben werden. Ich möchte nun, dass in diesem DBGrid in der Spalte Bezeichung zum einen eine Artikelbezeichnung eingegeben werden kann, die noch nicht in der Artikel-Tabelle vorhanden ist.
Zum andern möchte ich, dass mir beim eingeben der Artikelbezeichung eine ComboBox angezeigt wird in der die Artikel aus der Artikel-Tabelle mit den gleichen Anfangsbuchstaben angezeit wird (muss nicht unbedingt gefiltert sein, es reicht auch zum ersten Eintrag zu springen der der Eingebe entspricht). Wähle ich dann einen Artikel aus, der in der Artikel-Tabelle vorhanden ist, soll der Preis aus der Artikel-Tabelle in das DBGrid für die AuftragsArtikel übernommen werden.

Wo benötige ich nun den Denkanstoß? Eine Lookup kann ich ja nicht verwenden, da ich ja auch Bezeichnungen eingeben Möchte, die nicht bei den Artikeln existieren bzw. ich den Preis verändern möchte. Wie mache ist es dann? Über die PickList der der DBGrid.Columns[] ? Dan müsste ich aber alle Artikelbezeichungen vorher in die Picklist kopieren. :gruebel:

Vielen Dank im voraus

Martin

Frank Borland 28. Feb 2006 11:02

Re: ComboBox im DBGrid
 
Du mußt Deine Controls in DrawColumnCell selber zeichnen. Hier ist mal noch ein Denkanstoß
Dann kommmt da noch QuantumGrid... :-D


Gruß


Malte

Quake 28. Feb 2006 14:50

Re: ComboBox im DBGrid
 
Hallo,

Ich habe mir mal den "Denkanstoß" angeschaut. Das DBGrid hat zwar ein paar mehr Optionen, aber das ist auch nicht das was ich suche.
Die Quantums sind mir etwas zu teuer. :roll:

Ich suche noch ein bissl oder zur Not progge ich mein eigenes Look&Feel DBGrid.

mikhal 28. Feb 2006 14:55

Re: ComboBox im DBGrid
 
Persistente Felder bei deiner TTable oder TQuery anlegen, dann neues Feld hinzufügen, Art Nachschlagen, dann im unteren Bereich des Dialogs die Nachschlagetabelle wie bei einer DBLookupComboBox definieren.

Im DBGrid nur die Columns definieren, die angezeigt werden sollen.

Grüße
Mikhal

Quake 28. Feb 2006 15:13

Re: ComboBox im DBGrid
 
Aber dann kann ich doch auch nur Artikelbezeichnungen eingen die auch in der Artikel Tabelle stehen, oder?

mikhal 28. Feb 2006 16:47

Re: ComboBox im DBGrid
 
Ja.

Grüße
Mikhal

Quake 29. Mär 2007 10:14

Re: ComboBox im DBGrid
 
Hallo,

ich muss jetzt noch einmal an meinen alten Thread anknüpfen. Ich komme erst jetzt dazu an mein Projekt weiter zu arbeiten.

Ziel soll es sein, eine DBLookUpCombobox in einem DBGrid zu haben, wie es auch in MS-Access eines gibt. Ich möchte also in der Zelle des DBGrids eine Artikelbezeichnung eingeben und diese soll dann automatisch vervollständigt werden. Das Verwenden einer DBLookupComboBox scheitert aber an der Forderung, dass ich auch Artikelnamen eingeben möchte, die nicht in der LookupTabelle vorhanden sind.

Ich habe mir jetzt zwei Lösungsansätze überlegt.

1.
Ich kopiere alle Artikelnamen in die PickList der TColumn des DBGrid. Tippe ich dann was ein die Zelle ein, wird meine Eingabe nicht vervollständigt. Klappe ich die Picklist aus, erscheint meine Eingabe nicht mehr im InplaceEditor, sondern es wird nur ein Eintrag in der PickList ausgewählt.
Um dies zu umgehen, kann ich ja auf den InplaceEditor einfluss nehmen über MyDBGrid.InplaceEditor. Wie kann ich nun aber auf die PickList zugreifen.

2.
Ich kopiere alle Artikelnamen in eine ListBox und blende die ListBox unter dem InplaceEditor und einen kleinen Button im InplaceEditor ein. Die Tastaturereignisse fange ich dann ab und suche dann in der ListBox einen Eintag aus und vercollständige dann meine Eingabe im Inplace Editor.
Diese Methode ist aber zumindest sehr Aufwendig.

Oder gibt es inzwischen eine kostenlose DBGrid Komponente die dies unterstützt?

ciao
Martin

PS. Das Userhandling (usebility oder wie das auch immer heist) nach der Methode hier ist auch nicht so richtig schon.

uwewo 29. Mär 2007 10:44

Re: ComboBox im DBGrid
 
Bei der Eingabe eines neuen Artikels, muss doch sicherlich noch mehr wie nur die Beschreibung hinterlegt werden.(Preis, Menge etc.)

Warum öffnest Du im Onkeypress Deiner Zelle nicht ein neues Form, in der man den Artikel wählen oder neu eintragen kann?

Quake 29. Mär 2007 11:53

Re: ComboBox im DBGrid
 
Ja, richtig ich suche Danach den Preis usw. herraus.
Dein Vorschlag halte ich für den Anwender zu umständlich. In Access ist das ja so möglich, wie ich es haben möchte. Und es kann ja nicht angehen, das MS besser Programme schreibt als wie ich das tun tuhe :lol: .

uwewo 29. Mär 2007 12:25

Re: ComboBox im DBGrid
 
Zitat:

Zitat von Quake
Dein Vorschlag halte ich für den Anwender zu umständlich. wie ich das tun tuhe :lol: .

Warum soll das umständlich sein, es ist doch egal ob ich den Artikeltext in das DbGrid schreibe, oder sich automatisch ein Fenster öffnet.

Zitat:

Zitat von Quake
Ja, richtig ich suche Danach den Preis usw. herraus.

Bei einem neuen Artikel denke ich mal, dass es mit dem Preis heraussuchen schwierig wird.
Es sei denn fast alles kostet gleich viel.

[Edit] Ich habe übrigens, ich glaube hier im Forum von DBComboBoxen gelesen, die die Funktion unterstützen neue Artikel anzulegen.
[/Edit]

Quake 29. Mär 2007 12:59

Re: ComboBox im DBGrid
 
Naja, die Sache ist so ... Ich will nicht unbedingt einen neuen Artikel in der Artikel DB anlegen. Der manuell Eingegebene Artikel soll nur in der einen "Zelle" gespeichert werden. Zum Preis : Ist der Artikel in der ArtikelDB wird der Preis aus dieser Tabelle herauskopiert und kann dann noch manuell verändert werden. Ist der Artikel nicht in der ArtikelDB muss der Preis manuell eingegeben werden.
Das ist aber nicht mein Problem, sondern nur das Handling des Autovervollständigen.

Ja, die DBComboBox kenn ich wohl. Ich könnte damit auch versuchen, die DBComboBox über das DBGrid blenden, wenn die Zelle in den Editiermodus geht.

uwewo 29. Mär 2007 13:48

Re: ComboBox im DBGrid
 
Bin mir nicht sicher, aber wenn Du eine DBLookUpComboBox verwendest, kann Du unter ListSource deine ArtikelDB und unter Datasource die ZielDB einstellen. Nun müsste bei nicht vorhandenen Artikeln, trotzdem der eingegebene Text übernommen werden. Autovervollständigung funktioniert ebenfalls.

Quake 29. Mär 2007 14:16

Re: ComboBox im DBGrid
 
Das währe gut, wenn das gehen würde, geht aber nicht. Bei der DBLookupComboBox kann man nur einträge Auswählen, die auch in der anderen Datenbank Stehen. Das kann auch nicht anders sein, da meist nicht der Text sondern nur eine ID zur verlinkung gespeichert wird, und wo sollte dann der manuell eingegeben Text gespeichert werden?

Hansa 29. Mär 2007 18:27

Re: ComboBox im DBGrid
 
Stelle das DBGrid auf StringGrid um. Ist zwar vordergründig etwas mehr zu programmieren und zu testen, aber im Endeffekt bleibt die volle Kontrolle bei dir. Dazu hätte ich auch ein komplettes Beispiel. Beim DBGrid ist man immer irgendwie eingezwängt.

Quake 13. Apr 2007 06:49

Re: ComboBox im DBGrid
 
Hallo,

Ich muss nocheinmal die Diskusion zu diesem Thread aufnehmen.
Jetzt funktioniert es schon fast gut. Ich blende jetzt eine ListBox, direkt unter dem InPlaceEditor des DBGrids, ein. Das Handling über die Tastatur funktioniert auch nahezu 100%. Ich habe nur ein Problem mit dem Maushandling.
Wenn ich mit der Maus auf ein anderes Steuerelement im Formular klicke soll die ListBox unsichtbar werden. Dis habe ich im OnExit Ereignis des DBGrids auch verwirklicht. Dies hat aber einen kleinen Seitenefekt. Klicke ich in meine ListBox, wird diese durch die Behandlung von OnExit des DBGrids unsichtbar, und damit erhält die ListBox das OnClick-Ereignis nicht mehr. Daraus folgt, ich kann keinen Eintrag der ListBox mit der Maus auswählen.
Kann ich im OnExit irgendwie feststellen, auf welches Steuerelemt geklick wurde bzw. welches Steuerelemt den Focus als nächstes erhalten wird.

ciao
Martin

PS: Mir ist gerade noch der Gedanke gekommen, das ich das verbergen der ListBox auch anders bewerkstelligen könnte. Undzwar nicht im OnExit des DBGrids, sondern in allen anderen Steuerelementen (außer bei der ListBox) beim OnEnter. Est das Praktikabel?


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