Announcement

Collapse
No announcement yet.

Datenbankdaten in Combobox zur Auswahl stellen.

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

  • Datenbankdaten in Combobox zur Auswahl stellen.

    Hallo,
    ich bin ein Anfänger im Bezug auf Visual C++, aber das werdet ihr hier ja öfters hören.

    Folgende Situation:

    Ich habe in einer Datenbanktabelle eine ID mit einem Namen gespeichert. In einer Combobox möchte ich mir alle Namen als Auswahl für den User vorgeben. Hat der User einen Namen ausgewählt und bestätigt seine Auswahl, soll als Auswahlwert die ID zurückgegeben werden.

    Bisher bin ich so ans Problem heran gegangen:

    Code:
    // Daten aus Tabelle Fachgebiet abfragen 
    befehl = verbindung->CreateCommand();
    befehl->CommandText = "SELECT * FROM Fachgebiet";
    leser = befehl->ExecuteReader();
    
    // Daten in Liste kopieren
    while (leser->Read())
    {
    //Die ID und der Name werden in das Objekt geladen.
    Ofachgebiet = gcnew Structure(leser->GetInt32(0), leser->GetString(1));
    //Das Objekt wird der Liste fachgebiete hinzugefügt.
    fachgebiete->Add(Ofachgebiet);
    }
    leser->Close();
    Die Daten werden aus der Tabelle abgefragt und in einem Objekt gespeichert. Dieses Objekt wird dann in eine Liste geladen.

    Nur wie bekomme ich jetzt die Daten so in die Combobox, wie ich mir das vorstelle?

    Danke schon mal im Vorraus!

  • #2
    Hier mal eine Grundlage zur Combobox.
    Das Problem dabei ist, dass es sich um keine Lookup-Combobox handelt und man daher selber etwas Zusatzaufwand betreiben muss:
    - entweder die ID und den dazugehörigen Combobox-Index in einer eigenen Tabelle speichern und später aufgrund des Itemindex aus dieser Tabelle die ID holen
    - oder man kann an die Combobox noch irgendwie direkt eine Referenz zum Datenobjekt angeben, aber ich habe keine Ahnung ob sowas geht, ich arbeite nur mit C# und da ist das alles etwas anders (und einfacher).

    bye,
    Helmut

    Comment


    • #3
      Danke für deine Antwort, aber mittlerweile habe ich selber etwas ausprobiert und ich habe zu min. das Gefühl, dass ich auf dem richtigen Weg bin. So ganz funtionieren will es jedoch noch nicht.

      Deklaration der Objektklasse Structure:

      Code:
      ref class Structure
      {
      	int id;
      	String ^name;
      
      public:
      	Structure(int id, String ^name);
      
      	int idAusgeben();
      	String ^nameAusgeben();
      };
      Code:
      // Daten in Listen kopieren
      while (leser->Read())
      {
      Ofachgebiet = gcnew Structure(leser->GetInt32(0), leser->GetString(1));
      fachgebiete->Add(Ofachgebiet);				//Objekte in eigen Liste kopieren.
      
      fachgebietbox->BeginUpdate();				//
      fachgebietbox->Items->Add(Ofachgebiet);		//Objekte in Liste der Combobox kopieren.
      fachgebietbox->EndUpdate();				//
      }
      leser->Close();
      So sieht jetzt der Quellcode aus und das Combobox Objekt hat noch folgende Eigenschaften hinzugefügt bekommen:

      Code:
      this->fachgebietbox->DisplayMember = "name";
      this->fachgebietbox->ValueMember = "id";
      Starte ich jetzt die Anwendung zeigt er mir jedoch in der Combobox statt dem Namen, nur die Objektklasse, sprich "Structure" an.

      Comment


      • #4
        Databinding funktioniert mit Properties. Da wirst du mit Instanzfeldern nicht weit kommen insbesondere wenn die auch noch privat sind. Also ändere id und name in Properties und mache die öffentlich. Die beiden 'Ausgeben' Methoden sind dann überflüssig.

        Comment


        • #5
          Originally posted by Ralf Jansen View Post
          Databinding funktioniert mit Properties. Da wirst du mit Instanzfeldern nicht weit kommen insbesondere wenn die auch noch privat sind. Also ändere id und name in Properties und mache die öffentlich. Die beiden 'Ausgeben' Methoden sind dann überflüssig.
          Danke für die Antwort jetzt funktioniert es.

          Allerdings habe ich jetzt eine kleines neuen Problem. Wenn ich den Valuewert abfragen möchte mit:

          Code:
          modulbox->SelectedValue;
          dann liefert er mir ein Object zurück, aber nicht den Integerwert von ID.

          Comment

          Working...
          X