Leeres Feld zur Combobox/DropDownList hinzufügen

  • VB.NET

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Leeres Feld zur Combobox/DropDownList hinzufügen

    Hallo,

    ich habe ein typisiertes Dataset, mit dem ich eine Combobox/DropDownList fülle. Das klappt auch, allerdings werden meine Daten dann IMMER gefiltert, da ich kein leeres Feld habe, um alle Datensätze zu sehen. Daher meine Frage: Wie kann ich einer Combobox, die über ein Dataset gefüllt wird, ein zusätzliches leeres Feld hinzufügen, so dass ich alle Daten sehe.

    Ps.: Mit selected item =-1 etc. funktioniert es nicht, weil meine Combobox voll mit Werten ist.


    Hier Mein Code:

    VB.NET-Quellcode

    1. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    2. DropDownList1.DataSource = Datenbank.Übersicht
    3. DropDownList1.DisplayMember = "Name"
    4. DropDownList1.ValueMember = "Name"
    5. End Sub


    VB.NET-Quellcode

    1. Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DropDownList1.SelectedIndexChanged
    2. Dim suche As String = DropDownList1.SelectedValue.ToString
    3. Dim DataView = Datenbank.Übersicht.DefaultView
    4. ÜbersichtBindingSource.DataSource = DataView
    5. DataGridView2.DataSource = ÜbersichtBindingSource
    6. If DropDownList1.SelectedValue.ToString = "" Then
    7. DataView.RowFilter = String.Empty
    8. Else
    9. DataView.RowFilter = "Name = " & "'" & suche & "'"
    10. End If
    11. End Sub
    Tja, das geht nicht - nicht anwählen geht nicht.
    Ansonsten kann man dein Code stark vereinfachen, optimieren und vereinheitlichen:

    VB.NET-Quellcode

    1. Private Sub DropDownList1_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs) Handles DropDownList1.SelectedIndexChanged
    2. Dim suche As String = DropDownList1.SelectedValue.ToString
    3. ÜbersichtBindingSource.Filter = String.Concat("Name = ""'", DropDownList1.SelectedValue, "'")
    4. End Sub
    Und auch die Datasource der Combo kannste im Designer setzen - Code ist suboptimal dafür.
    gugge auch mal vier Views-Videos - könnte weiteres für dich interessantes enthalten.

    nochmal zum Prob: Am einfachsten ist eine zusätzliche Checkbox, die die Combobox enabled/disabled, und dabei den Filter an/ausschaltet.
    Ansonsten müsste man einen Extra-Datensatz in den Daten anlegen, der "ungefiltert" bedeutet.
    Vielen Dank für die schnelle Antwort. Die Idee mit der Checkbox werde ich umsetzen und die Kürzung meines Codes natürlich auch. Ist einfach und ich renne in keine Probleme mit DB Null values, wie wenn ich mir einen extra Datensatz anlege, in meinen weiteren Abfragen.

    Die Vids habe ich mir schon alle angeschaut. Ohne die hätte ich es auch nicht soweit geschafft. Besonders der typisierte Zugriff macht es für mich als totalen Anfänger selbsterklärend. Genau sowas hatte ich zu Beginn meines Projekts gesucht. Aber ich programmiere erst seit einer Woche, von daher kann ich mir nicht alles komplett merken. :)

    Ich habe schon einige Beiträge von Ihnen gelesen, besonders hinsichtlich des typisierten Ansatzes. Daher habe ich noch eine Frage. Ich bin halt erst neu dabei und verstehe einiges noch nicht so ganz. Daher habe ich für mich die Abfragen mit LINQ endeckt.

    Hier ein Beispiel:

    VB.NET-Quellcode

    1. Dim Logdata = (From d In Datenbank.Übersicht _
    2. Where d.letzte_Änderung = d.letzte_Aktualisierung AndAlso d.letzte_Differenz <> 0 _
    3. Order By d.letzte_Änderung _
    4. Select New NamePunktePunktedifferenzDatum With {.Name = d.Name, _
    5. .Punkte = d.Punkte, _
    6. .Punktedifferenz = d.letzte_Differenz, _
    7. .Datum = d.letzte_Änderung}).ToList


    Könnte ich diese Anfrage auch anders realisieren? Also über einen typisierten Zugriffscode? Ich fand dazu leider konkreten Beispiele. Ist es überhaupt möglich?
    Die Auswahl kann man sicher auch mit einem BindingSource-Filter realisieren.
    Nur diese NamePunktePunktedifferenzDatum-Dinger muss man sich nachwievor erstellen, denn eine BindingSource holt nur das aussm Dataset, was da drinne ist.

    Findest du den Namen "NamePunktePunktedifferenzDatum" nicht ein bischen knapp gehalten?
    Wie wäre "NameNameGleichNamePunktePunktedifferenzDatumVonUebersichtsUebersichtZusammenfassung"?

    Im Ernst: ich kann mir vorstellen, dasses vorstellbar ist, dasses auch ohne das ginge.