Announcement

Collapse
No announcement yet.

TDBLookupComboBox mit statischen Lookupfeldern?

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • TDBLookupComboBox mit statischen Lookupfeldern?

    Hallo,
    habe hierzu leider im Forum keine befriedigende Lösung gefunden:

    Ein Datenbank Tabellenfeld vom Typ Integer soll in einer TDBLookupComboBox mit sprechenden Namen dargestellt werden.
    Beispiel:
    0 = Nein
    1 = Ja

    Ich möchte allerdings nicht extra eine Datenbanktabelle für Nein/Ja anlegen und diese als Foreign Key referenzieren. Gibt es eine Möglichkeit der DBLookupComboBox die entsprechenden Felder irgendwie anders zu zuordnen?
    Mit TDBClientDataSet hab ich's bisher nicht hin bekommen
    (C++ Builder 2006 Professional).

    Hat jemand ne Idee, so ne Art MemoryDataSet vielleicht?

    Danke + Gruß

  • #2
    Hallo,

    die LookupComboBox ist - wie ihr Name schon sagt - dafür gedacht, die Werte aus einer anderen Tabelle zu referenzieren.
    Ich habe vor langer Zeit mal sowas, was Du willst, mit der TDBComboBox realisiert (dynamisch erzeugt):
    Code:
    CmbBx = new TDBComboBox(FFrm);
    CmbBx->Style = csDropDownList;
    CmbBx->Parent = FFrm;		// MUSS hier stehen, damit die nach-
     					// folgende Anweisung funktioniert!
                                            // Oder eben zur Entwurfszeit auf die Form bringen
    CmbBx->Items->Text = ValList->Text;     // Inhalt einer Stringliste
    CmbBx->DataSource = DataSrc;
    CmbBx->DataField = FdName;    // Feldname als String, Datentyp Integer
    Ich weiß nicht mehr genau, wie das war, aber jedenfalls wurden statt der Zahlen die Texte angezeigt.

    Gruß Knut

    Comment


    • #3
      re

      Die LookupList kommt einfach aus einem DataSet, muss ja keine DB Tabelle sein. Mich interessiert nur ob man das z.b: mit TClientDataSet (ohne XML-Datei im Hintergrund) hinbekommt.

      Comment


      • #4
        Hallo,

        ich verstehe Dein Problem offenbar nicht.
        Die LookupList kommt einfach aus einem DataSet, muss ja keine DB Tabelle sein.
        Ich hatte Dich so verstanden, dass die Werte eben nicht aus einem Dataset (= Tabelle) kommen sollen. Wat nu?

        Du kannst Doch die Werte aus der Datei mit
        Code:
        ValList->LoadFromFile(FileName);
        einlesen und dann wie oben beschrieben der ComboBox zuordnen.

        Gruß Knut

        Comment


        • #5
          re

          Bei der Zuordnung "Integer Value" - "String Representation" kommt Integer aus einer Datenbanktabelle, der sprechende String Name nicht.

          0 - "Nein"
          1 - "Ja"

          Verbinde ich eine TDBComboBox mit meinem Int-Datenbankfeld, und schreibe zusätzlich zeilenweise Items in das zugehörige Property-Feld, so erscheint zur Laufzeit in der TDBComboBox z.B. eine "1". Ich klappe die TDBComboBox runter, da stehen dann die eingegebenen Items drin. Aber diese können eben nicht zugeordnet werden (DB motzt beim Post: will Integer, kein String".
          Ausserdem soll da ja nicht die "1" stehen, sondern "Ja".

          Comment


          • #6
            Hallo Tim,

            da war wohl noch etwas (so oder ähnlich - es ist so lange her):
            Code:
            //---------------------------------------------------------------------------
            void __fastcall TDataModule1::OnGetTextBool(TField *Sender, System::AnsiString &Text, bool DisplayText)
            {
            int i;
            
                if (Sender->FieldName == "FdBool")
                {
                    if ((i = Sender->AsInteger) >= 0 && Sender->AsInteger < DBComboBox1->Items->Count)
                        Text = DBComboBox1->Items->Strings[i];
                    else
                        Text = "";
                }
                else
                    Text = Sender->AsString;
            }
            //---------------------------------------------------------------------------
            void __fastcall TDataModule1::OnSetTextBool(TField *Sender, System::AnsiString Text)
            {
            	if (Sender->FieldName == "FdBool")
            	{
            		if (DBComboBox1->ItemIndex >= 0)
            			Sender->ASInteger = DBComboBox1->ItemIndex;
            		else
            			Sender->Value = NULL;
            	}
            	else
            		Sender->AsString = Text;
            }
            //---------------------------------------------------------------------------
            Musst halt mal bissel probieren...

            Gruß Knut

            Comment

            Working...
            X