ComboBox zeigt immer ersten Eintrag an

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 5 Antworten in diesem Thema. Der letzte Beitrag () ist von Nils_Kr.

    ComboBox zeigt immer ersten Eintrag an

    Hallo,

    kurz zum Aufbau der Anwendung:
    In einem Formular werden in einem Datagridview Datensätze aus einer MySQL Datenbank angezeigt. Die Daten kommen aus einem View. Hier hat der Anwender die Möglichkeit, den ausgewählten Datensatz zu öffnen oder einen neuen anzulegen. Dadurch wird ein Formular geöffnet, welches mit der entsprechenden Tabelle verknüpft ist. Beim öffnen des Formulars wird entsprechend ein neuer Datensatz angelegt oder der ausgewählte Datensatz geladen. In der Tabelle sind mehrere Felder, welche sich auf verschiedene Stammdaten beziehen. Diese können mittels ComboBox (Datasource ist die jeweilige Stammdatentabelle) ausgewählt werden.
    Die Datensätze für die Stammdaten werden gefiltert geladen (im Dataset ist eine entsprechende Abfrage bei den Datatables hinterlegt). Des weiteren sind manche Stammdaten von anderen abhängig. Beispiel:
    Es gibt das Stammdatum Region und Bundesland. Die Bundesländer sind den jeweiligen Regionen zugewiesen.
    Wählt der Benutzer also in der ersten ComboBox eine Region aus, so werden die Datensätze für die Bundesländer entsprechend gefiltert und stehen in der zweiten ComboBox zur Verfügung. Und hier tritt das Problem auf, das der erste Eintrag von den Bundesländern in der ComboBox vorausgewählt wird. Und so passiert es auch mit 2 weiteren Stammdaten, welche sich auf das Stammdatum Region beziehen. Es ist hierbei auch egal, ob ich die Datensätze bereits gefiltert aus der DB abrufe oder hinterher die Bindingsource Filter. Ich habe auch keinen weiteren Code drin außer das befüllen des TableAdapters des jeweiligen Stammdatums.
    Ich könnte zwar nach der Aktualisierung den SelectedIndex der jeweiligen Combobox auf -1 setzen, aber irgendeinen Grund muss es ja für die "Vorauswahl" geben. Vielleicht hat von euch jemand eine Idee.

    Gruß, André
    Also ganz kurz zusammengefasst: 2 Comboboxen. Wenn in der 1. was ausgewählt wird, kommt in der 2. abhängig vom Combobox1-Wert eine bestimmte Ansammlung an Combobox2-Einträgen. Und in Combobox2 wird dann automatisch der 1. Eintrag ausgewählt. Nur zur Sicherheit: Mit welchem bisherigen Code bekommt CB2 seine Einträge?
    Denn wenn ich sowas »zu Fuß« mache, (bei Auswahl eines CB1-Items alle CB2-Items löschen und neue Items einfügen) passiert das nicht => Ich vermute, dass CB2 speziell eingestellt wurde.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Wie gesagt, die ComboBoxen sind per Datasource an eine Datatable gebunden, welche im Dataset hinterlegt ist und die Daten aus einer MySQL Datenbank bezieht. Den Tableadapter aktualisiere ich so:

    Quellcode

    1. Private Sub IDRegionalbereichReadableComboBox_SelectedIndexChanged(sender As Object, e As EventArgs) Handles IDRegionalbereichComboBox.SelectedIndexChanged
    2. intIDRegionalbereich = If(Me.IDRegionalbereichComboBox.SelectedIndex = -1, 0, System.Convert.ToInt16(Me.IDRegionalbereichComboBox.SelectedValue))
    3. intIDBundesland = 0
    4. Me.ViewLvSdBundeslandTableAdapter.FillByAktiv(Me.dbLeiKaDataSet.viewLvSdBundesland, intIDBundesland, intIDRegionalbereich)
    5. End Sub


    Die Abfrage sieht so aus:

    SQL-Abfrage

    1. SELECT * FROM viewLvSdBundesland Where (Aktiv = 1 And IDRegionalbereich = @varIDRegionalbereich) Or IDBundesland = @varIDBundesland


    (Ich lade alle Datensätze, welche noch Aktiv sind und der Region entsprechen, sowie den Datensatz, welcher bereits ausgewählt ist).
    Mehr Code nutze ich nicht bzw. hab alles andere entfernt um den Fehler einzuschränken.

    Edit: In einem Stammdatenformular habe ich interessanterweise das Problem nicht, obwohl ich dort ähnlichen Code verwende. Dort liegt aber auch das DatagridView mit allen Datensätzen mit im Formular.
    Mir wäre es tatsächlich lieber, wenn keine Vorauswahl getroffen wird. Das verhindert in meinen Augen Eingabefehler, da der Anwender bewusst etwas auswählen muss und nichts "vorgekaut" bekommt. Netterweise klappt es ja auch wenn ich die die Datatable der Stammdaten vor den eigentlichen Daten befülle.
    Ich helfe mir jetzt halt erstmal damit aus, das ich die Daten beim Enter-Ereignis Filter. Dann wird zwar auch ein Wert ausgewählt, man ist aber zumindest aktiv in das Feld gegangen.
    Ich hatte das Problem auch schon. Wenn man eine Funktion durch SelectionChangeCommitted triggern will ist es hinderlich, wenn schon etwas ausgewählt ist.
    Cbox.SelectedIndex = -1 funktioniert alleine aber auch nicht, da die "Befüllung" der Combobox nicht sofort passiert. Ich nutze einfach Timer dazu, die 10ms nach dem Befüllen alle betroffenen Comboboxen auf -1 setzen. Man muss halt nur im Hinterkopf behalten, dass die BindingSource trotzdem auf einen Datensatz zeigt.
    Option strict = on

    If it's stupid and it works it ain't stupid.