Listview SubItem ändern, funktioniert nicht.

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von TiTo.

    Listview SubItem ändern, funktioniert nicht.

    Hallo zusammen,

    ich habe ein kurioses Listview Problem.

    Ich prüfe anhand einer Schleife nach dem ersten Eintrages der Listview um die Subitem zu ändern.
    Also man kann sich das so vorstellen wie ein Download Programm, wo dann eben wie bei mir im SubItem die Prozentzahl angezeigt wird.
    Diese möchte ich ändern, da sich der Fortschritt des Downloads ja auch ändert.

    So sieht meine schleife aus:

    VB.NET-Quellcode

    1. For i = 0 To ListView1.Items.Count - 1
    2. If ListView1.Items.Item(i).Text = video.Title Then
    3. ListView1.Items.Item(i).SubItems(1).Text = args.ProgressPercentage & " %"
    4. End If
    5. Next


    Und er spuckt mir immer aus, das Index 1 ungültig sei.

    Quellcode

    1. InvalidArgument=Value mit dem Wert 1 ist für index ungültig.


    Ich nehme an, er meint das SubItem.

    Die listview hat nur zwei Spalten, in die erste kommt der interpret/titel rein und in die zweite spalte die prozentzahl.

    Kann mir jemand helfen? es ist echt komisch ?(
    Na, was Du da hast, klingt doch sehr nach einem Problem für DataSet und DataGridView. Siehe hier:

    vb-paradise.de/allgemeines/tip…hste-variante/#post520008

    Ein ListView ist generell für gar nichts geeignet. Geh lieber gleich den rechten weg.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TiTo schrieb:

    Die listview hat nur zwei Spalten,
    also je eijn Item und je ein SubItem.
    Und jetzt verrate ich Dir noch ein großes Geheimnis, davon darf aber der @ErfinderDesRades: nix erfahren:
    In .NET beginnen Aufzählungen stets mit dem Index 0 (Null).
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Try this:

    VB.NET-Quellcode

    1. Dim lvi = New ListViewItem("00")
    2. lvi.SubItems.Add("01")
    3. MessageBox.Show(lvi.SubItems.Count.ToString)
    Ergebnis:

    Brainfuck-Quellcode

    1. ---------------------------
    2. ---------------------------
    3. 2
    4. ---------------------------
    5. OK
    6. ---------------------------


    Aber halb so wild, denn post#2 ist eiglich der am meisten hilfreiche.
    Okay vielen Dank.

    Habe nun die DataGridView eingebaut.
    Das eintragen löse ich so:

    VB.NET-Quellcode

    1. Dim n As Integer = DataGridView1.Rows.Add()
    2. DataGridView1.Rows.Item(n).Cells(0).Value = video.Title
    3. DataGridView1.Rows.Item(n).Cells(1).Value = "Warte..."


    Das bearbeiten klappt aber nicht ganz:

    VB.NET-Quellcode

    1. For i = 0 To DataGridView1.RowCount - 1
    2. If DataGridView1.Rows.Item(i).Cells(0).Value = video.Title Then
    3. DataGridView1.Rows.Item(i).Cells(1).Value = args.ProgressPercentage & " %"
    4. End If
    5. Next


    Er schreibt nur in die Letzte Zeile in Spalte 2 den Prozent Status rein.

    Also er aktualisiert nicht das richtige Item.

    Was habe ich falsch gemacht?

    TiTo schrieb:

    Was habe ich falsch gemacht?
    Ich hab da einen kleinen Test gemacht:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private ii As Integer = 0
    3. Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
    4. Dim n As Integer = DataGridView1.Rows.Add()
    5. DataGridView1.Rows.Item(n).Cells(0).Value = "video.Title " & ii
    6. DataGridView1.Rows.Item(n).Cells(1).Value = "Warte..."
    7. ii += 1
    8. End Sub
    9. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    10. For i = 0 To DataGridView1.RowCount - 2
    11. If DataGridView1.Rows.Item(i).Cells(0).Value.ToString = "video.Title " & i Then
    12. DataGridView1.Rows.Item(i).Cells(1).Value = i & " %"
    13. End If
    14. Next
    15. End Sub
    16. End Class
    Was soll denn passieren?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Ich weiß nicht wie ich das erklären soll. Ich probiere es aber mal.

    Ich füge ein Item hinzu, es funktioniert.
    Füge ich ein zweites Item hinzu, dann sagen wir dass Item1 bei 12% war.
    Dann wenn ich Item2 hinzufüge, dann steht da auch 12% und bei Item2 zählt er weiter, anstatt bei Item1.
    Item1 bleibt dann bei 12% stehen, obwohl die Prozentanzahl ein Item drunter steht.

    Ich hoffe man konnte es verstehen.
    Hey,

    Du sollst auch nicht im DataGridView rumpfuschen, sondern Deine Datenstruktur in einer DataTable abbilden. Diese DataTable befindet sich dann in einem DataSet. Diese DataTable bindest Du dann an das DataGridView und manipulierst die Daten in der Table.
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o

    TiTo schrieb:

    Ich hoffe man konnte es verstehen.
    Ist das ein Multi-Download?
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!