![]() |
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 |
Re: ComboBox im DBGrid
Du mußt Deine Controls in DrawColumnCell selber zeichnen. Hier ist mal noch ein
![]() Dann kommmt da noch QuantumGrid... :-D Gruß Malte |
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. |
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 |
Re: ComboBox im DBGrid
Aber dann kann ich doch auch nur Artikelbezeichnungen eingen die auch in der Artikel Tabelle stehen, oder?
|
Re: ComboBox im DBGrid
Ja.
Grüße Mikhal |
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 ![]() |
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? |
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: . |
Re: ComboBox im DBGrid
Zitat:
Zitat:
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] |
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. |
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.
|
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?
|
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.
|
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 17:33 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz