Duplikate aus gebundener Combobox entfernen.

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von Jeiss.

    Duplikate aus gebundener Combobox entfernen.

    Hallo,

    Hab ein Problem mit den Einträgen (items) einer Combobox. Die Quelle welche meiner Combobox als Itemsource zur Verfügung steht enthällt leider viele Duplikate (doppelte Einträge). ?(

    Wollte mal sehen ob jemand weiss wie ich diese Duplikate los werden könnte. Die Bindung der Combobox funktioniert übrigens gut.
    Hier mal die Einstellungen der Combobox:

    XML-Quellcode

    1. <ComboBox Height="23" Width="140" Name="ComboBox1" Margin="0 8 0 12"ItemsSource="{Binding EventsCollection}"
    2. DisplayMemberPath="EventType"SelectedValue="{Binding Path=SelectedEvent.EventType}"
    3. SelectedValuePath="EventType" />

    Danke,
    Jeiss
    Am besten die Quelle von doppelten Einträgen bereinigen.
    Wenn du eine observalbeCollection(of T) hast dann einfach bei for each durchlaufen und erstes Element mit allen vergleichen, bei übereinstimmung duplikat löschen. Dass so oft bis das erste Element nur mehr einmal vor kommt dann zum 2ten Element gehn und so weiter. Musst hald mit schleifen verschachteln.
    Oder du passt gleich beim hinzufügen auf, dass nichts doppelt hinzukommt.
    mfg.skyscater
    Hallo alle zusammen,

    Na wenigstens kann ich nicht behaupten, dass sich niemand für mein Problemchen interessiert. Also gleich drei Helfer, na ja das ist ja schon was..... Danke!.

    Ja stimmt! Ich mach das gerne in WPF.

    Also SkySaters Gedanke gefällt mir natürlich gut. Bloss wie mache ich das. Die ItemsSource ist tatsächlich eine observalbeCollection(of T). Aber die wird auch noch von einem anderen Fenster als Datacontext gebraucht. Da kann ich nicht einfach so filtern.

    Das eigentliche Problem liegt in meiner Datenquelle (sql). Da hab ich in einer Tabelle ein "Kategorie"-Feld.(dieses Feld stellt die Itemssource der Combobox dar) Aber anstatt, schön sauber eine zweite Tabelle für die Kategorie-Wahl der Einträge der ersten Tabelle bereitzustellen, hab ich die Kategorie gleich in die erste Tabelle eingetragen.

    Aber vieleicht könnte ich (wenn das geht?) eine neue Collection erstellen die "gefiltert" wäre. Und die ausschliesslich als Quelle für meine Combobox dienen würde.

    Frage an euch! Könnte das gehen?

    Danke,

    Jeiss
    Also gleich drei Helfer

    drei? xD
    aber vieleicht könnte ich (wenn das geht?) eine neue Collection erstellen die "gefiltert" wäre. Und die ausschliesslich als Quelle für meine Combobox dienen würde.

    Sicher geht das, währ auch meiun nächster Anatz gewesen.
    einfach neue OvservableCollection(of T) erstellen und der dann die Itemd der Reihe nach wenn es das Item nicht schon gibt hinzufügen.

    VB.NET-Quellcode

    1. for each item as T in alteListe
    2. if not neueListe.contains(item) then neueListe.add(item)
    3. next

    Is nur ausm Kopf heraus....
    mfg.skyscater
    Hallo,

    war mir gar nicht aufgefallen dass du zweimal geantwortet hast.... :rolleyes:

    Kann ja sein, dass wir auf der richtigen Spur sind. Doch mit der Schleife aus "deinem Koppf" werden alle Einträge der ertsen Collection in die zweite Kopiert. Es müsste geprüft werden ob der "Inhalt" des "Kategorie"-Feldes schon in der zweiten Collection enthalten ist, nicht das ganze "item". Könnte die zweite Collection dann nicht auch gleich vom String-Type sein?

    Kannst du mir bitte noch ein wenig weiter helfen?

    Danke
    Hab mit Datenbaken leider keine Erfahrung...
    Welchen Typ hat denn die erste Collection überhaupt?
    Könnte die zweite Collection dann nicht auch gleich vom String-Type sein?

    Hätte auch gedacht, dass das so ist.

    Dann musst du die neue Collection eben vom Typ String definieren, und dann einfach nur die Strings, die Angezeigt werden sollen rüber kopieren wenns nicht schon vorhanden sind.
    mfg.skyscater
    Hallo,

    aslo das war wieder mal eine schwehre Geburt..... :S

    Meine Combobox funktioniert jetzt so wie ich es mir vorgestellt hatte. Die zweite collection ist aber doch vom gleichen Typ wie die erste OvservableCollection!

    Das mit der zweiten OvservableCollection vom String-Typ, das hab ich nicht hingekriegt. Die Strings wurden schon in der Combobox angezeigt, bloss funktionierte die Bindung von SelectedValue dann nicht mehr. Ist das vieleicht ganz normal? Kann man der Combobox keine zwei verschiedene Typen zumuten? String als Itemsource und tblEvents (eigener Typ) für die Bindung....

    Mit "Distinct" wusste ich in diesem Fall leider nichts anzufangen. Aber hoffentlich fällt das mir wieder ein wenn ich es mal brauchen werde. Sieht schon ganz interessant aus.

    Hiermit wäre dieser Fall ja mal dank eurer Hilfe erledigt. :thumbup:

    Danke.