![]() |
TDBComboBox mit mapped Values
Ich versuche gerade mit den Bordmitteln in XE7 ein wenig nachzubauen, was ich die letzten 14 Jahre problemlos mit zugekauften Komponenten erledigt hatte (die erforderliche Komponentenversion konnte ich meinem Chef noch nicht aus dem Kreuz leiern). Bisher hatte ich von InfoPower eine TwwDBComboBox verwendet, die es erlaubt einem Anzeigetext einen zu speichernden Wert zuzuordnen. Es ist also möglich zB eine ComboBox zu erstellen, deren auswählbare Werte (Männlich, Weiblich, Intersex, k.A.) sind, und gespeichert wird dann (1,2,3,4). Umgekehrt wird dieses DB-gebundene Komponente dann beim einlesen des Wertes 2 zB direkt "Weiblich" als Inhalt anzeigen.
Ich dachte ernsthaft das wäre mit der Delphi-eigenen DBComboBox auch ohne weiteres möglich. In der Tat finde ich jedoch keine "einfache" Möglichkeit dies zu tun. Übersehe ich etwas? Würden die Livebindings da nützen? Ich habe kurz in die TDBLookupComboBox geschaut, aber die erwartet eine DataSource als Lookup-Menge, was mich auf den ersten bis zweiten Blick auch nicht wirklich weiterbringt. Macht Ihr sowas? Wenn ja wie? Mein konkreter Anwendungsfall ist eine Software die bestimmte medizinische Sachverhalte nach Standardschlüsseln auflöst und sie dann exportiert. Es ist also nur auf der Oberfläche nötig "Weiblich" zu sehen. Die weitere Verwurschtelung der Daten wünscht sich die "2". Darum war es bisher so praktisch mit der wwDBComboBox. Sherlock |
AW: TDBComboBox mit mapped Values
Liste der Anhänge anzeigen (Anzahl: 1)
Hattest du an sowas gedacht? :stupid:
Delphi-Quellcode:
und mal die DFM dazu
unit Form.Main;
interface uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Data.DB, Datasnap.DBClient, Vcl.DBCtrls, Vcl.Grids, Vcl.DBGrids, Vcl.StdCtrls, Vcl.Mask, Vcl.ExtCtrls; type TMainForm = class( TForm ) GenderMappingData: TClientDataSet; PersonData: TClientDataSet; GenderMappingData_Gender: TIntegerField; GenderMappingData_DisplayName: TStringField; Person_Gender: TDBLookupComboBox; GenderMapping: TDataSource; PersonData_FirstName: TStringField; PersonData_LastName: TStringField; PersonData_Gender: TIntegerField; Person: TDataSource; PersonNavigator: TDBNavigator; Person_FirstName: TDBEdit; Person_LastName: TDBEdit; PersonGrid: TDBGrid; PersonData_GenderName: TStringField; private { Private-Deklarationen } public procedure AfterConstruction; override; end; var MainForm: TMainForm; implementation {$R *.dfm} { TForm1 } procedure TMainForm.AfterConstruction; begin inherited; {GenderMappingData} GenderMappingData.CreateDataSet; GenderMappingData.LogChanges := False; GenderMappingData.AppendRecord( [1, 'Männlich'] ); GenderMappingData.AppendRecord( [2, 'Weiblich'] ); GenderMappingData.AppendRecord( [3, 'Intersex'] ); GenderMappingData.AppendRecord( [4, 'Unbestimmt'] ); {PersonData} PersonData.CreateDataSet; PersonData.LogChanges := False; end; end.
Code:
object MainForm: TMainForm
Left = 0 Top = 0 Caption = 'MainForm' ClientHeight = 232 ClientWidth = 811 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'Tahoma' Font.Style = [] OldCreateOrder = False PixelsPerInch = 96 TextHeight = 13 object Person_Gender: TDBLookupComboBox Left = 262 Top = 176 Width = 145 Height = 21 DataField = 'Gender' DataSource = Person KeyField = 'Gender' ListField = 'DisplayName' ListSource = GenderMapping TabOrder = 2 end object PersonNavigator: TDBNavigator Left = 8 Top = 8 Width = 240 Height = 25 DataSource = Person TabOrder = 0 end object Person_FirstName: TDBEdit Left = 8 Top = 176 Width = 121 Height = 21 DataField = 'FirstName' DataSource = Person TabOrder = 3 end object Person_LastName: TDBEdit Left = 135 Top = 176 Width = 121 Height = 21 DataField = 'LastName' DataSource = Person TabOrder = 4 end object PersonGrid: TDBGrid Left = 8 Top = 39 Width = 769 Height = 120 DataSource = Person TabOrder = 1 TitleFont.Charset = DEFAULT_CHARSET TitleFont.Color = clWindowText TitleFont.Height = -11 TitleFont.Name = 'Tahoma' TitleFont.Style = [] end object GenderMappingData: TClientDataSet Aggregates = <> Params = <> Left = 648 Top = 56 object GenderMappingData_Gender: TIntegerField FieldName = 'Gender' end object GenderMappingData_DisplayName: TStringField FieldName = 'DisplayName' Size = 50 end end object PersonData: TClientDataSet Aggregates = <> Params = <> Left = 648 Top = 112 object PersonData_FirstName: TStringField FieldName = 'FirstName' Size = 50 end object PersonData_LastName: TStringField FieldName = 'LastName' Size = 50 end object PersonData_Gender: TIntegerField FieldName = 'Gender' Visible = False end object PersonData_GenderName: TStringField FieldKind = fkLookup FieldName = 'GenderName' LookupDataSet = GenderMappingData LookupKeyFields = 'Gender' LookupResultField = 'DisplayName' KeyFields = 'Gender' Size = 50 Lookup = True end end object GenderMapping: TDataSource AutoEdit = False DataSet = GenderMappingData Left = 504 Top = 56 end object Person: TDataSource DataSet = PersonData Left = 504 Top = 112 end end |
AW: TDBComboBox mit mapped Values
:shock:
Ich hatte komplett aus den Augen verloren, daß Datasets beliebige Datenquellen haben können. Super! Vielen Dank. Sherlock |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:14 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