WPF: Combobox Selected Value ID ermitteln
Aufgabe:
Wie ermittelt man den ausgewählten Wert in WPF bei einer Combobox
Ich möchte bei einer Combobox in WPF ermitteln, welche Nummer das ausgewählte Element besitzt.
Die Elemente in der Combobox wurden über ComboBoxItem über Content als Anzeigetext und Tag als Wert geladen
Lösung:
Man kann den Wert oder hier das Tag/Key über die vorige Umwandlung des ComboBoxItem ermitteln.
Trick:
Über die Zuweisung des SelectedValuePath auf das Tag des SelectedItem, kann man sich eine umständliche Selection sparen.
Wenn man SelectedValuePath=Tag wählt, dann kann man beim Start einfach der kompletten ComboBox einen numerischen Wert zuweisen.
<ComboBox x:Name="Combo_IDMaschine" Grid.Row="4" Grid.Column="1" HorizontalAlignment="Left" Width="265" SelectedValuePath="Tag" > </ComboBox>
|
Zuweisen einer Nummer als Wert
Combo_IDMaschine.SelectedValue = 123; |
Code Beispiel:
ComboBoxItem item = Combo_IDMaschine.SelectedItem as ComboBoxItem ; data.IDMaschine = (int) item.Tag; //*get value of combobox
//Or data.IDMaschine = (int) ((ComboBoxItem) Combo_IDMaschine.SelectedItem).Tag ; //*get value of combobo
|
Auszug aus Überwachung, Debug-Fenster
Name |
Value |
Type |
|
▶ |
Combo_IDMaschine.SelectedItem |
{System.Windows.Controls.ComboBoxItem: Fräser 1} |
object {System.Windows.Controls.ComboBoxItem} |
▶ |
Combo_IDMaschine |
{System.Windows.Controls.ComboBox Items.Count:6} |
System.Windows.Controls.ComboBox |
Combo_IDMaschine.Tag |
null |
object |
|
Combo_IDMaschine.SelectionBoxItem |
"Fräser 1" |
object {string} |
|
▶ |
Combo_IDMaschine.SelectedValue |
{System.Windows.Controls.ComboBoxItem: Fräser 1} |
object {System.Windows.Controls.ComboBoxItem} |
Combo_IDMaschine.SelectedIndex |
2 |
int |
|
((System.Windows.FrameworkElement)Combo_IDMaschine.SelectedValue).Tag |
4 |
object {int} |
|
((System.Windows.FrameworkElement) Combo_IDMaschine.SelectedItem).Tag |
4 |
object {int} |
Füllen einer Combobox
Mit Tag als Werte-Speicher für ID oder Key
private void load_Combobox_Maschinen() { //----------------< load_Combobox_Maschinen() >---------------- Combo_IDMaschine.Items.Clear();
try { //----< Daten laden >---- //< get_Data > var data = (from tbl in db.tblBase_Maschinen orderby tbl.Maschine ascending select tbl); //</ get_Data >
//--< @Loop: Rows >-- foreach (var row in data) { ComboBoxItem item = new ComboBoxItem(); item.Content = row.Maschine; item.Tag= row.IDMaschine; //key-value Combo_IDMaschine.Items.Add(item); } //--</ @Loop: Rows >--
//----</ Daten laden >---- } catch (Exception ex) { MessageBox.Show(ex.Message); } //----------------</ load_Combobox_Maschinen() >---------------- }
|
Lesen und Speichern einer Combobox
public void save_Data() { //------------< save_Data() >------------ string sID = tbxID.Text; //< check > if (sID == "") return; //</ check >
int ID = Convert.ToInt32(sID);
tblBase_Mitarbeiter data; data = db.tblBase_Mitarbeiter.SingleOrDefault(n => n.IDMitarbeiter == ID); if (data != null) { data.dtCreated = DateTime.Now; data.Vorname = tbxVorname.Text; data.Nachname = tbxNachname.Text; data.Personalnummer = tbxPersonalNr.Text;
data.IDMaschine = (int) ((ComboBoxItem) Combo_IDMaschine.SelectedItem).Tag ; //*get value of combobox
//< save > db.SaveChanges(); //ID: -99999->16 load_DataGrid(); //</ save > } //------------</ save_Data() >------------ }
|
Zuweisen einer Nummer als Wert
Combo_IDMaschine.SelectedValue = 123; |
Beispiel: Laden eines Datensatzes, Zuweisen auf eine Combobox
public void load_Dataset_byID(int ID) { //----------------< load_Dataset_byID() >---------------- try { var data = db.tblBase_Mitarbeiter.FirstOrDefault(id => id.IDMitarbeiter == ID); if (data != null) { //--< felder fuellen >-- tbxID.Text = data.IDMitarbeiter.ToString(); tbxVorname.Text = data.Vorname.ToString() ; tbxNachname.Text = data.Nachname.ToString(); tbxPersonalNr.Text = data.Personalnummer; Combo_IDMaschine.SelectedValue = data.IDMaschine; //123 //--</ felder fuellen >-- } } catch (Exception ex) { // System.Diagnostics.Debug.WriteLine(ex); }
//----------------</ load_Dataset_byID() >---------------- }
|