| Autor |
Beitrag |
Talemantros
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 08:47
Hallo,
ich möchte gern eine Combobox beim Start füllen anhand eines Wertes in der Datenbank.
Dieser gibt den Listindex an und wird über eine Klasse an eine BindigSource geknüpft.
Wie kann ich nun der Combobox das Databinding über die Eigenschaften mitgeben, dass diese weiß bei dem Wert z.B.: 2, dass es den dritten Eintrag anzeigen soll?
Ich habe SelectedValue und SelectedItem probiert leider ohne Erfolg.
SelectedIndex habe ich nicht gefunden.
Danke
Gruß
|
|
Th69
      

Beiträge: 4805
Erhaltene Danke: 1061
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Sa 23.04.16 09:36
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 09:46
Hi,
ja das weiß ich...
ich versuche dies über DataBindings mit der BindigSource und das klappt irgendwie nicht.
VG
Edit
Bisher mache ich es so
C#-Quelltext 1: 2:
| localOptions = OptionsBuisness.GetClassOptions(); bsOptions.DataSource = localOptions; |
Die entsprechenden Werte sind dann über die Eigenschaften der Controls gebunden
Hier würde ich dann auch gern den Index der neuen Combobox nehmen
So finde ich es aber nachdem was ihr mir mal erklärt habt "falsch"
C#-Quelltext 1: 2: 3: 4:
| localOptions = OptionsBuisness.GetClassOptions(); bsOptions.DataSource = localOptions;
cmbStornierungsnummer.SelectedIndex = localOptions.GenerateStornoNumber; |
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 23.04.16 10:15
Du kannst auch Position an der BindingSource setzen. Sollte aber das gleiche machen wie SelectedIndex an der ComboBox.
Edit: GenerateStornoNumber klingt nach einer Property der Klasse. Ich sehe da auch keinen Zusammenhang mit dem Index/Position eines Elements in der Liste die du an die Combobox bindest?
Was ist GenerateStornoNumber?
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 10:56
Hallo Ralf,
das mit Position an der BindingSource verstehe ich leider gerade nicht.
Es gibt eine Combobox, in der der User 4 verschiedene Versionen auswählen kann wie die Stornierungsnummer (wenn eine Rechnung storniert wird) generiert wird.
Diese Auswahl (statt dem Text) wollte ich in der MySQL speichern um beim späteren Ablauf der Stornierung mit Switch diese Auswahl abzuarbeiten.
Im Moment hänge ich daran, wie ich die Auswahl in die MySQL über die Property bekomme bzw. wieder im Optionsmenü anzeigen lassen kann.
VG
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 23.04.16 11:02
Man bindet üblicherweise was aufzählbares (eine Liste halt) an eine Combobox. Und Position/SelectedIndex ist die Position in der Liste, irgendwie sowas wie das 3 Elemente von 10.
Die Position in einer Combobox kann ich mir nur schwer vorstellen das du das irgendwohin persistierst um es später wieder einzulesen und wieder auszuwählen. Das wäre abhängig von der Sortierung der Liste und der Sortierung der Liste in der Combobox. Das klingt schon nach Problemen. Da ich aber nicht weiß was GenerateStornoNumber ist kann ich keine konkrete Hilfe geben.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 12:36
Ich dachte unter GenerateStornoNumber zum Beispiel 3 als Index abzuspeichern was dann aber wohl keinen Sinn macht
Wie würdest du die letze Auswahl des Users in der DB ablegen ?
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 23.04.16 12:48
Jeder Datensatz in einer DB sollte eine Id (irgendwas das den Primärschlüssel darstellt) haben die würde ich mir merken. Über die Id dann den ausgewählten Datensatz raussuchen und den als SelectedItem der ComboBox zuweisen. Alternativ kannst du auch versuchen über die Id an den Index in der Liste zu kommen und den dann SelectedIndex zuweisen.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 17:18
Hallo Ralf,
vielen Dank.
Ich hoffe ich habe es richtig verstanden und habe es nun wie folgt gelöst:
1.) Statt den Text direkt in der Programmierung der Combobox zuzuweisen, habe ich die in eine neue Tabelle meiner Datenbank ausgelagert:
Tabelle: cmbauswahl
Felder: cmbauswahlid = Autoincrement
comboboxname = varchar
Auswahl = varchar
2.) Nun lasse ich die Comboboxen über diese Tabelle füllen
C#-Quelltext 1: 2: 3: 4: 5: 6:
| LoadCmbValues(cmbStornierungsnummer); LoadCmbValues(cmbAblauf); LoadCmbValues(cmbAusdruck); LoadCmbValues(cmbZusatztext); LoadCmbValues(cmbAusrichtungText); LoadCmbValues(cmbNummernLogik); |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7:
| private void LoadCmbValues (KryptonComboBox ctrl) { ctrl.DataSource = OptionsBuisness.GetDataTableComboboxValues(ctrl.Name); ctrl.ValueMember = "cmbauswahlid"; ctrl.DisplayMember = "auswahl";
} |
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18:
| public static DataTable GetDataTableComboboxValues(string comboboxname) { strSQl = "Select cmbauswahlid, auswahl from cmbauswahl where comboboxname =?comboboxname";
DataTable dt = new DataTable();
using (MySqlConnection conn = new MySqlConnection(connStr)) { using (MySqlDataAdapter da = new MySqlDataAdapter(strSQl, conn)) { da.SelectCommand.Parameters.AddWithValue("?comboboxname", comboboxname);
da.Fill(dt); } }
return dt; } |
Und die ID der Auswahl lege ich in der Tabelle "OPTIONEN" meiner Datenbank ab und lade sie wieder entsprechend über die BindingSource
SelectedItem hatte nicht funktioniert, da habe ich SelectedValue verwendet.
Hast du "kontruktive" Kritik? (Ich befürchte JA  )
Gruß
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Sa 23.04.16 18:21
| Zitat: | Hast du "kontruktive" Kritik? (Ich befürchte JA ) |
Ob das konstruktiv war überlegen wir uns nachher
Löst das jetzt ein ~konkretes~ Problem? Ein Tabelle cmbauswahl klingt gaaaanz merkwürdig.
Außer es ist ein völlig generisches Ding das ein beliebiges Problem lösen soll. Also z.B eine Art Anwendungs Designer wo ein User Comboboxen und ihre Inhalte frei definieren können soll.
Aber du sprachst irgendwas von einer Rechnung also würde ich ja in der Datenbank eine Tabelle Rechnung erwarten mit Werten die der Auswahl deiner Comboboxen darstellen und z.B. ein paar anderen Lookup Tabellen die die möglichen Werte die man für die Rechnung auswählen darf enthält. Das wäre ein abstrahiertes Model des Problems unabhängig von der UI die man nachher drüber legt.
So ein abstrahiertes Modell macht auch mehr Sinn. Denn die Daten leben üblicherweise länger als die Anwendung mit der man mal angefangen hat, Und wenn man dann ein Datenmodel hat das der ersten Anwendung folgt und eben nicht einfach allgemein dem Problem ist es extrem schwierig in Zukunft das Ding zu pflegen wenn sich die Anforderungen weiterentwickeln.
|
|
Talemantros 
      
Beiträge: 444
Erhaltene Danke: 2
Win7 Proff 64bit
C# (VS2013)
|
Verfasst: Sa 23.04.16 21:42
Die Tabelle hatte ich eigentlich nur gebastelt weil ich nicht wusste wie ich sonst die Werte inkl. einer ID an die Combobox bekomme um diese Id dann als UserAuswahl speichern zu können.
|
|