Entwickler-Ecke

WinForms - ComboBox Rückgabewert in INT


Schmido - So 28.02.10 18:21
Titel: ComboBox Rückgabewert in INT
Hallo Zusammen,

ich habe eine ComboBox, die automatisch aus einem TableAdapter gefüllt wird.
Hierbei ist Display_Member der textuelle Inhalt und Display_Value die ID aus dem Table_Adapter.
Mit dem Button Speichern soll ein entsprechender Eintrag erzeugt werden, wobei die kategorie_id als INT Wert zu übergeben ist.
Ich komme aber an die Checkbox nur als String heran und mit (int) kann man ja keinen String umwandeln.


C#-Quelltext
1:
this.cbbKategorie.SelectedItem.ToString()                    


Vielen Dank für Tipps und Tricks!


Christian S. - So 28.02.10 18:37

Von welchem Typ sind denn die Items in der comboBox dann? Kenne mich mit dem TableAdapter nicht wirklich aus. Prinzipiell müsste doch sowas möglich sein:


C#-Quelltext
1:
((DerTyp) this.cbbKategorie.SelectedItem).ID                    


denn die ComboBox hält ja als Items die kompletten Objekte.


Schmido - Mo 08.03.10 22:09

Hallo,

sorry für meine späte Antwort!
Ne leider gibt es keine ID oder das Feld "Kategorie_id" oder ähnliches.
Daher fragte ich ja :)

Jemand noch Tipps oder Tricks?

Grüße


Christian S. - Mo 08.03.10 22:13

DisplayMember und DisplayValue verweisen doch aber auf Eigenschaften der Objekte, die in der ComboBox drin sind. Da muss es doch eine Klasse zu geben!


Schmido - Mo 08.03.10 22:29

Also im TableAdapter sollten ja die Typen der Tabelle sein.
kategorie_id ist INT
kategorie_name ist VARCHAR

Das Display Member und Value stammen aus dem BindingSource.
Aber beide habe ich bisher nirgends finden können.


JüTho - Di 09.03.10 10:20

user profile iconSchmido hat folgendes geschrieben Zum zitierten Posting springen:
Das Display Member und Value stammen aus dem BindingSource.
Aber beide habe ich bisher nirgends finden können.

Diese Zuordnungen stehen in der Formular.Designer.cs.

Jürgen


Schmido - Di 09.03.10 18:52

Hallo,

super! Darüber sind wir jetzt schonmal weiter:


C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
            // 
            // cbbKategorie
            // 
            this.cbbKategorie.DataBindings.Add(new System.Windows.Forms.Binding("SelectedValue"this.kategorieBindingSource, "kategorie_id"true));
            this.cbbKategorie.DataSource = this.kategorieBindingSource;
            this.cbbKategorie.DisplayMember = "kategorie_name";
            this.cbbKategorie.FormattingEnabled = true;
            this.cbbKategorie.Location = new System.Drawing.Point(9148);
            this.cbbKategorie.Name = "cbbKategorie";
            this.cbbKategorie.Size = new System.Drawing.Size(12121);
            this.cbbKategorie.TabIndex = 2;
            this.cbbKategorie.ValueMember = "kategorie_id";


Schmido - Mi 10.03.10 19:52

Noch jemand eine Idee, wie ich nun an die kategorie_id, also den value Wert komme?

Danke! Danke Danke!


Christian S. - Mi 10.03.10 20:09

Ich hab jetzt mal das Szenario bei mir nachgestellt und im SelectedIndexChanged-Event einfach mal geguckt, von welchem Typ denn das SelectedItem einer solchen ComboBox ist. Das zeigte mir, dass das ein DataRowView ist. Kurz in der Hilfe geguckt: Hat einen Default-Indexer um auf die Spalten zuzugreifen. Bei mir klappt es dann so:

Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
  if comboBox1.SelectedItem <> nil then
  begin
    var drv := DataRowView(comboBox1.SelectedItem);
    MessageBox.Show(drv['ID'].ToString);
  end;

(Ist zwar Prism, geht in C# dann aber genauso)

//Edit: Noch schöner kam man's machen, wenn man in die richtige Klasse castet:

Delphi-Prism-Quelltext
1:
2:
3:
4:
5:
6:
  if comboBox1.SelectedItem <> nil then
  begin
    var drv := DataRowView(comboBox1.SelectedItem);
    var row := websiteDataSet.CategoryRow(drv.Row);
    MessageBox.Show(row.ID.ToString);
  end;