none
Keine Duplikate in ComboBox RRS feed

  • Frage

  • Guten Tag,

    wie kann ich in einer ComboBox nur eindeutige DS ausgeben???Also wie ein Distinct in SQL.

     

    Danke für eure Antwort!

     

    Gruss

     

    telakis

    Montag, 25. September 2006 09:11

Antworten

  • Die Eindeutigkeit kann man mit der distinct-Anweisung einer LinQ erreichen, die man zum Laden (z.B. binden an die DataSource) nutzt, z.B. so:

    Option Infer On ' Only VB9
    Option Strict On
    
    Public Class Form1
    
      Dim cb As New ComboBox With {.Dock = DockStyle.Top}
    
      Dim liste() As String = {"11", "33", "22", "33", "77", "66", "11", "66"}
    
      Private Sub Form1_Load(ByVal sender As Object, _
                             ByVal e As System.EventArgs) _
                             Handles Me.Load
        Me.Controls.AddRange(New Control() {cb})
        cb.DataSource = (From itm In liste Select itm Distinct).ToList
      End Sub
    
    End Class
    --
    Peter
    Dienstag, 22. September 2009 04:33

Alle Antworten

  • Hallo telakis,

    So wird’s gemacht:

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            ComboBox1.Items.Add("aba")
            ComboBox1.Items.Add("bab")
            ComboBox1.Items.Add("def")
            ComboBox1.Items.Add("ref")
            ComboBox1.Items.Add("def")
            ComboBox1.Items.Add("abb")
            ComboBox1.Items.Add("bba")
            ComboBox1.Items.Add("aba")
    End Sub
    
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
    
            For i As Int16 = 0 To Me.ComboBox1.Items.Count - 2
                For j As Int16 = Me.ComboBox1.Items.Count - 1 To i + 1 Step -1
                    If Me.ComboBox1.Items(i).ToString = Me.ComboBox1.Items(j).ToString Then
                        Me.ComboBox1.Items.RemoveAt(j)
                    End If
                Next
            Next
    
        End Sub
    End Class

     



    Grüße,

    Robert

    Montag, 21. September 2009 20:22
  • Die Eindeutigkeit kann man mit der distinct-Anweisung einer LinQ erreichen, die man zum Laden (z.B. binden an die DataSource) nutzt, z.B. so:

    Option Infer On ' Only VB9
    Option Strict On
    
    Public Class Form1
    
      Dim cb As New ComboBox With {.Dock = DockStyle.Top}
    
      Dim liste() As String = {"11", "33", "22", "33", "77", "66", "11", "66"}
    
      Private Sub Form1_Load(ByVal sender As Object, _
                             ByVal e As System.EventArgs) _
                             Handles Me.Load
        Me.Controls.AddRange(New Control() {cb})
        cb.DataSource = (From itm In liste Select itm Distinct).ToList
      End Sub
    
    End Class
    --
    Peter
    Dienstag, 22. September 2009 04:33
  • Hallo Robert,

    nachdem ich mich stundenlang abgemüht habe und selbst versucht habe auf eine brauchbare Lösung zu kommen, habe ich diese Lösung verwendet, um doppelte Menueeinträge in einem ToolStripMenu zu entdecken. Ich habe es einfach für meine Zwecke abgewandelt und es hat einwandfrei funktioniert:

    For i As Int16 = 0 To CShort(Me.KontoToolStripMenuItem.DropDownItems.Count - 2)
    For j As Int16 = CShort(Me.KontoToolStripMenuItem.DropDownItems.Count - 1) To CShort(i + 1) Step -1
    If Me.KontoToolStripMenuItem.DropDownItems(i).ToString = Me.KontoToolStripMenuItem.DropDownItems(j).ToString Then
    MsgBox("Duplikat gefunden")
    End If
    Next
    Next

    War ein toller Tipp - danke!

    Mittwoch, 7. April 2010 13:13
  • Hallo Schochi,

    Tipp am Rande:
    Du kannst für die Variablen jeweils einen Integer verwenden,
    und das CShort weglassen, was den Code übersichtlicher macht.
    Intern wird dort mit ohnhin Integer für die Indexer (Item) gearbeitet
    und so ist das Umwandeln sinnfrei.

    Gruß Elmar

    Mittwoch, 7. April 2010 15:58
  • Hallo Peter,

    bei deiner Lösung habe ich für mich gleich drei neue Methoden kennengelernt.
    Kurz, knapp und wahnsinnig effizient.

    ...gefällt mir.


    Liebe Grüße Stefan
    Mittwoch, 7. April 2010 19:12
  • Hallo Elmar,

    vielen Dank für den Tipp. Da ich noch Anfänger bin und zur Zeit mein erstes "großes" Programm (6 Forms und 40 Eigenschaften) schreibe, bin ich für jeden Tipp von den Profis dankbar. Bisher habe ich alle Probleme selbst gelöst, aber ich bin sicher man trifft sich noch im Forum, da ich jetzt eigentlich mit meinen Latein weitestgehend am Ende bin und jetzt professionelle Hilfe gut gebrauchen kann. Zur Zeit kämpfe ich mit damit, dass ich alle Eigenschaften in eine ArrayList schreibe, ich aber nicht weiß, wie ich die zusammengehörigen Datensätze wieder zusammen bekomme, aber das werde ich erst mal im Forum nachschauen bzw. gesondert als Frage einstellen.

    Viele Grüße und danke nochmal

    Donnerstag, 8. April 2010 11:49