Autor |
Beitrag |
dinazavric
      
Beiträge: 75
|
Verfasst: Fr 13.05.11 11:07
Ich bräuchte wieder euer Hilfe. Ich habe ein Problem wo ich nicht weiter komme, vielleicht verstehe ich da was falsch... Bei einer ComboBox möchte ich nachschauen ob ein Wert ausgewählt wurde oder nicht. Die ComboBox ist über ein Binding an die Daten gebunden und für den Anfang mit ComboBox1.SelectedItem = null auf "leer" gesetzt. Wenn ich aber sowas schreibe:
C#-Quelltext 1:
| if (ComboBox1.SelectedItem == null) {...} |
geht es immer rein, wenn auch nichts ausgewählt wurde... wieso passiert das? Liegt es am Binding? Das gleiche habe ich auch mit SelectedValue usw. probiert, funktioniert aber trotzdem nicht...
Vielen Dank für die Hilfe
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Do 19.05.11 11:26
kann mir keiner helfen?? 
|
|
Th69
      

Beiträge: 4795
Erhaltene Danke: 1059
Win10
C#, C++ (VS 2017/19/22)
|
Verfasst: Do 19.05.11 12:23
Hallo,
irgendwie verstehe ich deine Frage nicht, denn du schreibst ja
dinazavric hat folgendes geschrieben: |
geht es immer rein, wenn auch nichts ausgewählt wurde...
|
Und "nichts" heißt eben "comboBox.SelectedItem" ist "null".
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Do 19.05.11 12:49
Th69 hat folgendes geschrieben : | irgendwie verstehe ich deine Frage nicht |
Ich habe ein DataSet, in dem ich vorher einige Daten speichere. Dabei werden diese Daten an eine ComboBox gebunden. Ein Benutzer kann die eingestellten Werte eintragen, falls die Box leer ist, sprich keine Daten vorher gespeichert wurden, oder ändern. Um die ComboBox auf "leer" zu stellen benutze ich SelectedItem = null. Dabei wird kein Item angezeigt. Eine Liste an möglichen Items ist aber nach wie vor da. Um die Daten neu zu ünernehmen und abzuspeichern muss ich überprüfen ob ein Item ausgewählt wurde oder ob die ComboBox immer noch leer ist. Das mache ich auch mit if (SelectedItem == null). Falls die ComboBox "leer" steht, ist bei mir die Bedingung trotzdem "true".
|
|
jaenicke
      
Beiträge: 19312
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Do 19.05.11 13:36
dinazavric hat folgendes geschrieben : | Falls die ComboBox "leer" steht, ist bei mir die Bedingung trotzdem "true". |
Naja, du testest ja auch auf leer. Du meinst wohl eher das Gegenteil...
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 19.05.11 13:49
Ich glaube er will darauf hinnaus das keins der Items ausgewählt aber ein Text eingegeben wurde.
Den Inhalt findest du dann auch in der Text-Property.
Und bedenke das nur weil der Text eines Items eingegeben wurde nicht gleichzeitig auch dieses Item ausgewählt wird (zumindest nicht ohne einen AutoCompleteMode).
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Do 19.05.11 13:54
|
|
bakachan
      
Beiträge: 503
Erhaltene Danke: 34
W7 (x64) Ultimate
C# / VB.NET (VS2010 Ultimate)
|
Verfasst: Do 19.05.11 14:07
Wenn in der ComboBox nichts ausgewählt ist ist das SelectedItem null und der SelectedIndex -1.
Wenn das bei dir nie der Fall ist, ist halt immer etwas ausgewählt.
Ich glaube nicht das der Fehler bei deiner Bedingung liegt.
Für diesen Beitrag haben gedankt: dinazavric
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Do 19.05.11 14:19
bakachan hat folgendes geschrieben : | Ich glaube nicht das der Fehler bei deiner Bedingung liegt. |
wie gesagt, da die Daten an die Box gebunden sind, kann es sein, dass wenn auch nichts angezeigt wird, trotzdem durch die Bindung ein SelectedItem immer da ist? Es ist nähmlich so, dass dabei immer der erste Wert aus dem DataSet übernommen wird, wenn ich bei einer "leeren" Box auf SelectedItem.Text.ToString() den Inhalt speichern möchte. Deswegen wollte ich auch um dies zu vermeiden erst schauen ob die wirklich leer ist...
|
|
Ralf Jansen
      
Beiträge: 4708
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Do 19.05.11 14:22
Vielleicht mal ein wenig mehr Code zeigen. Sonst reden wir hier die ganze Zeit nur darüber was du denn genau meinen könntest.
Zeuge am besten die Codestelle(n) die folgende Fragen beantworten könnten.
Wie hast du gebunden (die Auswahlliste und/oder auch die die Selektion z.B. über SelectedItem oder Text)?
Was hast du gebunden (von was für einem Datentyp reden wir hier, wenn du SelectedItem gebunden hast ist der gebundene Typ vielleicht gar nicht nullable)?
Wie ist die Combobox sonst noch eingestellt.
Wann fragst du den Zustand von SelectedItem ab (Hat dann die Combobox noch den Focus, oder fragst du gerade ab wenn du gerade gebunden hast)
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Do 19.05.11 14:35
Genau, das ist mein Code, zumindest die Stellen, die relevant sind. Da ich mehrere ComboBoxen habe und diese als Array zusammengefasst, werde ich es immer für eine i-te Box zeigen.
Die Bundung:
C#-Quelltext 1: 2: 3: 4: 5: 6:
| BindingSource bs = new BindingSource(); bs.DataSource = dataSetPro; NameControls[i].DisplayMember = "Parameters.ParameterName"; NameControls[i].ValueMember = "Parameters.ParameterName"; NameControls[i].DataSource = bs; NameControls[i].SelectedItem = null; |
Es wurde ein String-Wert gebunden... Dann übernehme ich die Daten, falls diese vorher gespeichert wurden:
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21:
| int j = 0; foreach (DataRow dataRow in dataSetPro1.Tables["ParameterSelect"].Rows) { if (dataRow["ProtocolID"].ToString() == IdTpro.Text) { if (j < 10) { NameControls[j].Text = dataRow["ParameterName"].ToString(); j++; } else break; } else { if (j < 10) { NameControls[j].SelectedItem = null; } else break; } } |
Dann kommt eben die Abfrage nach einem null-Item.
C#-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| if (NameControls[i].SelectedItem == null) { Status.Text = "..."; } else { DataRow newRow = dataSetPro.Tables["ParameterSelect"].NewRow(); newRow["ParameterName"] = NameControls[i].Text.ToString(); dataSetPro.Tables["ParameterSelect"].Rows.Add(newRow); } |
|
|
dinazavric 
      
Beiträge: 75
|
Verfasst: Fr 20.05.11 11:38
Was ich hier vergessen habe einzugeben, ist dass ich before ich das SelectedItem geprüft habe, habe ich dataSetPro.AcceptChanges() gemacht. Das war wohl mein Fehler! Das DataSet wird dadurch aktualisiert und natürlich alles was damit verbunden ist auch. Obwohl die ComboBoxen immer noch "leer" erschienen, waren die SelectedItems schon verbunden...
Nun habe ich AcceptChanges() auskommentiert und sehe da - es funktioniert!!!!
Ich bedanke mich hier bei allen, die mir helfen wollten!
|
|