VB.Net Listview problem

mafu

Mitglied
Hallo und zwar ich habe jetzt folgendes will eine listview erstellen das hab ich auch schon und klappt soweit jetzt habe ich 4 spalten schon erstellt und wenn ich jetzt aus einer txt. lese kommt alles nur in der ersten spalte, 2-4 sind reine infos
so nun zu meinen Fragen:
1.) Wie kann ich in einer listview in mehreren spalten auf einmal einlesen und beschreiben
2.) wenn ich das funkt. dann wie kann ich z.b. die erste spalte auslesen und in einen string umwanden zur weiterverarbeitung?

mfg Roman
 

Christian Kusmanow

Erfahrenes Mitglied
Hi Roman!

  1. Das ListView.SelectedItems Property kannst dafür verwenden.
    Das ist eine index-orentierte Sammlung und Du kannst daher jedes Item über einen Indexer ansprechen.
    In deinem Fall würde sich das durchiterieren durch diese Sammlung mittels For Each anbieten.
  2. Ein ListViewItem besteht aus mehreren SubItems (ListViewItem.SubItems)
    Diese Sammlung ist ebenfalls index-orientiert und daher kannst alle Items ebenfalls genau so wie eben beschrieben ansprechen.
    Diese SubItems sind aber nicht dafür gedacht um deren Werte an anderer Stelle weiter zu verwenden.
    Das würde den Präsentations-Layer zu sehr mit dem Business-Layer vermischen.

    Die Daten eines ListViewItems kommen ja von einem bestimmten Objekt.
    Daher hat ein ListViewItem auch das ListViewItem.Tag Property,
    worin Du dieses Objekt ablegen solltest um im nachhinein Bequemer mit den Daten arbeiten zu können.
 

Norbert Eder

Erfahrenes Mitglied
Angehängt hast du eine kleine .NET 2.0 Solution die dir den Umgang zeigt.

Hier der Code zum Befüllen des ListViews. Zu beachten sind die weiteren Überladungen der Add-Methode, als auch die unterschiedlichen Konstruktoren des ListViewItems.

Code:
ListViewItem lvi = new ListViewItem("1");
lvi.SubItems.Add("2");
lvi.SubItems.Add("3");
lvi.SubItems.Add("4");
this.demoListView.Items.Add(lvi);
Die Anzeige der Information kann so geschehen:

Code:
if (this.demoListView.SelectedItems.Count > 0)
{
MessageBox.Show(this, "Selected Value (first column): " + this.demoListView.SelectedItems.Text, "Result", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
else
{
MessageBox.Show(this, "No row selected", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
}
Das als einfaches Beispiel und es sollte für deine Anforderungen reichen.

 

Anhänge

  • 27248attachment.zip
    30,6 KB · Aufrufe: 141

Christian Kusmanow

Erfahrenes Mitglied
Naja, er wollte es in VB wissen, wovor es mir ja bekannter maßen graut.
Und genau die selben Beispiele findet man auch in der MSDN,
wenn man im ObjektBrowser mal die genannten Propertys eingibt... :)
Code:
Dim listViewItem As New ListViewItem("item1")
listViewItem.SubItems.Add("1")
listViewItem.SubItems.Add("2")
listViewItem.SubItems.Add("3")
Me.demoListView.Items.Add( listViewItem )

Code:
Dim textString As String
For Each item In demoListView.SelectedItems
        textString += item.SubItems(1).Text & item.SubItems(2).Text & item.SubItems(3).Text & Environment.NewLine
Next
 

mafu

Mitglied
hallo und schönen Nikolaus
entweder bin ich zu blöd des zu erledigen oder steh ich grad voll aufm schlauch.
Code:
 ' Listview laden:
    Private Sub BT_Listboxfüllen_Click(ByVal sender As System.Object, _
ByVal e As System.EventArgs) Handles BT_Listboxfüllen.Click
        Dim Sr1 As StreamReader = New StreamReader("D:\ip.txt")

        Dim Line As String
        LV_IP.Items.Clear()
        Do
            Line = Sr1.ReadLine ()
            If Line <> Nothing Then LV_IP.Items.Add(Line)
        Loop Until Line Is Nothing
        Sr1.Close()
    End Sub

jetzt will ich das nich nur ne ip adresse sondern auch die dazugehörigen pc in der zweiten spalte angezeigt werden! (alles in einer oder halt notfalls in mehreren textdatein). sollen
aber alle wieder löschbar sein.
die ip adresse soll dann in ein string umgewandelt werden so das man ein pingbefehl ausführen kann

mfg Roman
 

Christian Kusmanow

Erfahrenes Mitglied
Hi!

Danke Dir auch. :D
  • Sind Textdateien mehr als unpraktisch mit Datensätzen zu arbeiten.
    Dafür gibt es XML. Was zudem dank des XML-DOM, welches komplett vom Framework implementiert wird, viel einfacher zu verwenden ist. Such mal hier im Forum nach XML...
  • Hoffe ich das Du auch mehrere Columns für die einzelnen Elemente angelegt hast.
    Das kannst im VS Designer machen. Schau also mal in das Propertygrid des Designers...
    Weiterhin hast bereits ein Snipped bekommen wie man ein ListViewItem mit mehreren Elementen erstellen kann.

    Die Daten (IP und Host) kannst ja erst mal mit einem "|" trennen und zur Verwendung wieder aufsplitten.
Code:
Dim line As String
Do While (Not line = ipHostReader.ReadLine Is Nothing)
        Dim ipHostArray As String() = line.Split( "|".ToCharArray()(0) )
        Dim item1 As New ListViewItem( New String() { ipHostArray (0), ipHostArray (1) } )
Loop
Wen Du bedarf hast, mach Dir heute Abend mal eine kleine Demo mit XML einlesen, Daten in Objekte speichern, ändern und anzeigen der Daten und wieder speichern in ein XML.
 

Nil18

Erfahrenes Mitglied
cosmo hat gesagt.:
Wen Du bedarf hast, mach Dir heute Abend mal eine kleine Demo mit XML einlesen, Daten in Objekte speichern, ändern und anzeigen der Daten und wieder speichern in ein XML.
Oh ja bitte, interessiert mich auch :)
Aber bitte in C#
 

Christian Kusmanow

Erfahrenes Mitglied
Tut mir leid Leute. Ich hab die Woche keine Zeit finden können. Heute siehts auch echt mau aus.
Werd das dann evtl. am WE erledigen. Ansonsten nächste Woche.
 

Neue Beiträge