Combobox Datenfeld?

x_Red_Eagle_x

Erfahrenes Mitglied
Hallo alle zusammen!
Ich lese aus ner Datenbank (Access) mittels eines DataReaders ein paar Datensätze aus.
Soweit so gut.

Nun möchte ich die Datensätze in die ComboBox schreiben (auch noch kein Problem; halt nicht den ganzen Datensatz sondern nur ein Feld namens Bezeichnung), jedoch benötige ich zum Späteren weiterarbeiten die ID des Datensatzes (und ich hab nirgendwo wie z.B.: beim ListView ein Tag- Feld gesehn).

hat jemand eine Idee wie ich das lösen könnte

mfg
 
Einfachste Möglichkeit:
Die Liste einer ComboBox ist eine ListItemCollection.
Jedes ListItem hat eine Text- und eine Value-Eigenschaft.
In der Eigenschaft Text steht deine Bezeichnung und in Value deine ID.
 
Hab ich probiert, ist jedoch nicht gegangen. ListItemCollections sind (hoffentlich sag i jetzt nix falsches) nur unter ASP.Net verfügbar.

Ich sitzte jedoch an einer Windowsanwedung

mfg
 
Hi,
soweit ich dich richtig verstanden habe, ist dein Problem eigentich ziemlich einfach.
Als erstes holst du dir die Datensätze, die du in der Combobox angezeigt haben möchtest aus der Datenbank. Und zwar in deinem Falle die Bezeichnung. Weiter holst du dir auch die ID mit heraus. Das ganze würde wohl so aussehen:
"SELECT Id, Bezeichnung FROM Tabelle"

Diesen Select String benutzt du am besten mit einem OleDbDataAdapter.
Dann erzeugst du ein DataSet und mit der Fill() Methode aus dem DataAdapter füllst du das DataSet.
Jetzt kannst du auf die ID und die Bezeichnung im DataSet zugreifen.
Es gibt bei der ComboBox eine Eigenschaft die nennt sich DataTextField.
Dieser Eigenschaft kannst eine Liste zuweisen, die in der ComboBox angezeigt werden soll.
Weiterhin gibt es eine Eigenschaft, die sich DataValueField nennt. Dieser Eingenschaft kannst du die ID zuweisen, die dann im Hintergrund sozusagen gespeichert wird. Auf diesen Wert (Value) kannst du dann im nachhinein zugreifen.
Der Quelltext könnte z.B. so aussehen:

OleDbDataAdapter oda = new OleDbDataAdapter("SELECT Id, Bezeichnung FROM Tabelle", connection);
DataSet ds = new DataSet();
oda.Fill(ds);
comboBox.DataSource = ds;
comboBox.DataTextField = "Bezeichnung";
comboBox.DataValueField = "Id";
comboBox.DataBind();

Beides ist jetzt in deiner ComboBox gespeichert.
Die Id, die zu einer bestimmten Bezeichnung in der ComboBox gehört, bekommst du jetzt ganz einfach mit der Eigenschaft

comboBox.SelectedValue

heraus.

Ich hoffe das war dein Problem und ich konnte dir helfen.

Gruss Andre.

P.S. Das bisschen Quellcode ist jetzt natürlich in C# Syntax, die Vorgehensweise in VB in aber genauso.
 
Danke erstmals für die Antwort.

Ich habe das Problem zwar ein bisschen anderest gelöst, weil ich nicht expliziet hierfür einen DataSet verwenden wollte.

Falls es jemanden interresiert gibt es noch eine 2. Methode in die ComboBox einen Wert mitzuspeichern. Man benötigt nur das Wissen, dass die ComboBox zum Anzeigen ihrer Items auf die ToString Methode zugreift.

mfg
 
Original geschrieben von x_Red_Eagle_x
Man benötigt nur das Wissen, dass die ComboBox zum Anzeigen ihrer Items auf die ToString Methode zugreift.
Aha, und dann ?
Ich komme da jetzt irgendwie nicht so schnell auf den Kniff, den du angewendet haben könntest...:-(
 
Du kannst z.B.: von einer bestehenden Klasse/Struktur die ToString- Methode überladen oder eine eigene Klasse schreiben. Ich bin nicht so gut im Erklären, deswegen bring ich lieber ein kleines Beispiel:
Code:
	public class CComboBoxItem
	{
		string m_sText;
		object m_objValue;
		
		public CComboBoxItem(string sText, object objValue){
			m_sText = sText;
			m_objValue = objValue;
		}

		public override string ToString(){	return m_sText;	}

		public object Value{ get{return m_objValue;} }
	}

Ist wie man sieht auch in C# geschrieben, weil ich mein VB.Net Projekt schon abgeschlossen hab. -> Diese Klasse bräuchte man nur mehr einer ComboBox, ganz normal zuweisen:
Code:
//Zum Setzten
cmbTest.Add(new CComboBoxItem("Test", 14));
//zum Lesen
CComboBoxItem objCmbItem = (CComboBoxItem) cmbTest.Items[i];

mfg
 
Hi,
stimmt, so könnte man es auch machen. Du hast die Methode aber überschrieben, nicht überladen, ist aber nicht weiter wichtig. Auf jeden Fall funktioniert es so auch. Wäre mir persönlich aber ein bischen zu umständlich.

Gruß
 
Zuletzt bearbeitet:
Zurück