Laden...

Listview doppelte Einträge

Erstellt von Gloki vor 18 Jahren Letzter Beitrag vor 18 Jahren 4.705 Views
G
Gloki Themenstarter:in
42 Beiträge seit 2005
vor 18 Jahren
Listview doppelte Einträge

Hallo,

habe da ein kleines Problemchen, und zwar habe Ich eine ListView und fülle diese in einer Schleife mit Einträgen.
Funktioniert auch, nur zeigt es mir den letzten Eintrag immer öfters an.

Ich glaube, ich weiß auch woran es liegt. 🤔

Erstmal der Code (in VB.Net):

        For Each s As String in xFiles
            If Not s Is Nothing Then
                lvi = New ListViewItem(s)
                lvi.SubItems.Add("Irgendwas")
                lvi.SubItems.Add("Irgendwas")
                lvi.SubItems.Add("Irgendwas")
                lstFiles.Items.Add(lvi)
            End If
        Next

Jetzt meine Vermutung:
Er fügt mir immer soviele Zeilen ein, wie der Array Elemente hat. Nun gibt es allerdings in dem Array ain paar leere Elemente, die ich eigentlich mit

If Not s Is Nothing

aussortiere. Sie werden laut Debugger auch aussortiert, aber dafür fügt er das letzte nicht leere Array-Element so oft ein, bis Anzahl Zeilen der ListView = Anzahl Elemente im Array.

Wo liegt mein Denkfehler ?(

Ach ja, dieses hier bringt das gleiche Ergebnis:

        For Each s As String in xFiles
            If Not s Is Nothing Then
                lvi = New ListViewItem(s)
                lvi.SubItems.Add("Irgendwas")
                lvi.SubItems.Add("Irgendwas")
                lvi.SubItems.Add("Irgendwas")
                If Not lstFiles.Items.Contains(lvi) Then
                    lstFiles.Items.Add(lvi)
                End If
            End If
        Next

Ich kann also die Elemente auch so nicht aussortieren X(

Vielen Dank schonmal

Gloki

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo Gloki!

Also Dein Code ist gut, ich würde die erste Variante nehmen, da in der 2. die zusätzliche Abfrage zu dem Ergebnis führen kann, dass tatsächlich doppelte Einträge (in der Quelle) nicht einträgt. Wenn das so aber gewollt ist, dann solltest Du Variante 2 nehmen.

Aber zu Deinem Problem:

Schau mal ob irgendwo im nachfolgenden Code nochmals irgendwo



lstFiles.Items.Add(x);


auftaucht?

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

G
Gloki Themenstarter:in
42 Beiträge seit 2005
vor 18 Jahren

Hallo norman,

erstmal Danke für Deine Antwort.

Eigentlich will ich auch die erste Variante nehmen, denn durch Namenskonventionen kann es gar keine doppelten Einträge geben (In der Liste werden Dateinamen angezeigt)

Schau mal ob irgendwo im nachfolgenden Code nochmals irgendwo

Nee, gibt es nicht 🙁

Komisch ist aber, wenn ich im Debugger das Befüllen überwache, erstellt er mir das letzte Element in dieser Schleife x-Mal.
Deswegen habe ich die zweite Variante ausprobiert, aber diese erkennt irgendwie nicht, dass das Element bereits in der Liste auftaucht und fügt es nochmals hinzu.

N
750 Beiträge seit 2004
vor 18 Jahren

kann es sein, das er das

If Not lstFiles.Items.Contains(lvi) Then
                    lstFiles.Items.Add(lvi)
                End If

immer ausführt, weil du vorher mit

 lvi = New ListViewItem(s)

immer ein neues Objekt erzeugst??
d.h. er kann es dann auch in deiner listview nicht finden....

dann musst du vielleicht auf den string prüfen, ob dieser irgendwo in einem element deiner listview vorkommt.....

?( wer suchet, der findet auch! :]

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo Gloki,

Nun gibt es allerdings in dem Array ain paar leere Elemente, die ich eigentlich mit

was heißt leer? == null oder == ""? null und "" ist ein Unterschied.

herbivore

G
Gloki Themenstarter:in
42 Beiträge seit 2005
vor 18 Jahren

Guten Morgen!

@ nils: Danke für Deinen Hinweis, damit fällt die 2. Variante komplett weg.

@ herbivore: Sie sind == null, denn sie werden nie gefüllt (habe es aber auch ' mit = "" ' versucht und mit ' == null or == "" ')

Habe das Problem jetzt aber schon anderweitig gelöst. Habe einfach die Anwendung, in der ich den Array befülle so umgeschrieben, dass es keine leeren Elemente mehr gibt. Ist wohl auch die sauberste Lösung.

Obwohl mich auch interessiert hätte, wo das Problem lag 🤔

Vielen Dank nochmal für eure Hilfe

Gruß,

Gloki