listview auslesen und mit variable deklarieren

  • VB.NET

SSL ist deaktiviert! Aktivieren Sie SSL für diese Sitzung, um eine sichere Verbindung herzustellen.

Es gibt 16 Antworten in diesem Thema. Der letzte Beitrag () ist von schmosy.

    listview auslesen und mit variable deklarieren

    Hallo zusammen,

    ich bin neu hier und arbeite das erste Mal mit VB. Das meiste konnte ich bis jetzt erfolgreich googeln, aber folgendes Problem schaff ich nicht mit meiner "Erfahrung" zu lösen.

    Ich habe eine listview erstellt, sodass der Benutzer 6 Spalten ausfüllen soll. Dafür trägt er in den einzelnen Textboxen die Zahlen ein und drückt auf "Hinzufügen". Das kann man so oft machen, wie man will. Sobald alles erledigt ist, drückt man auf "OK" und nun soll das Programm alles auslesen und jeweils einer Variablen zuordnen, sodass diese Variablen dann später weitergegeben werden können (zB für die Einstellung eines Ofens).
    Zunächst lese ich die Anzahl (anz) der Zeilen aus, da ich möchte dass meine Variablen zB für die Heizrate hr_1, hr_2, ...hr_anz sein soll.

    Nun sollen alle 6 "Grundvariablen" so benannt werden, damit jeder Wert in der Tabelle seine Variable hat.
    Wie lasse ich nun die einzelnen Werte auslesen und diese so zuordnen?
    Oder kann man das mit einem Array lösen und das später auslesen? Wie mach ich das dann?

    Danke!!!

    Das ist das was ich schonmal habe:

    Visual Basic-Quellcode

    1. Private Sub B_hinzu_Click(sender As Object, e As EventArgs) Handles B_hinzu.Click
    2. Dim add As New ListViewItem(TB_HR.Text$)
    3. add.SubItems.Add(TB_ST.Text$)
    4. add.SubItems.Add(TB_HAZ.Text$)
    5. add.SubItems.Add(TB_ET.Text$)
    6. add.SubItems.Add(TB_AR.Text$)
    7. add.SubItems.Add(TB_HZE.Text$)
    8. LV_Temp.Items.Add(add)
    9. TB_HR.Clear()
    10. TB_ST.Clear()
    11. TB_HAZ.Clear()
    12. TB_ET.Clear()
    13. TB_AR.Clear()
    14. TB_HZE.Clear()
    15. End Sub
    16. Private Sub B_okt_Click(sender As Object, e As EventArgs) Handles B_okt.Click
    17. Dim anz As Integer = 0
    18. For anz = 0 To LV_Temp.Items.Count - 1
    19. Next
    20. End Sub
    Ich verstehe leider gar nicht was genau du vor hast. Kannst du das evtl. etwas genauer beschreiben?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen

    schmosy schrieb:

    Oder kann man das mit einem Array lösen und das später auslesen? Wie mach ich das dann?
    Du arbeitest offensichtlich (ohne dasses dir eiglich klar ist) mit Datensätzen. Was ein Datensatz eiglich ist, ist hier u.a. definiert: Grundlagen: Fachbegriffe
    Daher empfehle ich dringend, auch die für Datensatz-Verarbeitung vorgesehenen Technologien zu benutzen, insbesondere typisiertes Dataset, DatagridView und Databinding.
    ListView ist für solche Sachen ziemlich ungeeignet - hingegen ein datengebundenes DataGridView ist hier optimal.

    Also wirf mal einen Blick in die vier Views-Videos, um einen Einblick in die Leistungsfähigkeit dieser vorgesehenen Technologien zu gewinnen.
    Und dann heissts sich den Kram halt anzulernen. Ist viel, aber dieses viele zu lernen ist immer noch einfacher, als erstmal auf dem ListView-Holzweg voranzuschreiten, nur um iwann dann doch alles übern Haufen zu werfen, unds doch "richtig" zu lernen.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Okay, danke schonmal für die Antworten.
    Ich möchte einfach, dass die Tabelle, die der Benutzer erstellt, gelesen und einer Variablen zugeordnet wird. Ob das nun sofot passiert, also jede einzelne Zahl in der Zelle einer Variablen gehört oder erstmal ein Array für die Zeilen erstellt werden und dann später einer Variablen zugeordnet werden ist egal. Am Ende der ganzen Geschichte wird die Zahl nicht mehr als string genutzt, sondern als Double...Ich weiß grad nicht was ich noch dazu sagen soll ^^

    Und danke für den Hinweis... Bei "learning by doing" ist es schon nicht verwunderlich, dass Lücken auftauchen || Ich schau mir das an
    Ok, mal ganz allgemein Interpretiert:
    ​Der Benutzer kann sich eine Tabelle selbst zusammen stellen und dann mit Inhalten befüllen. Am Ende möchtest du das ganze Ding speichern.

    Verstehe ich das richtig?
    "Gib einem Mann einen Fisch und du ernährst ihn für einen Tag. Lehre einen Mann zu fischen und du ernährst ihn für sein Leben."

    Wie debugge ich richtig? => Debuggen, Fehler finden und beseitigen
    Wie man VisualStudio nutzt? => VisualStudio richtig nutzen
    @schmosy Dann würde ich Dir, wie schon der @ErfinderDesRades ein DataGridView mit DataTable als DataSource nahelegen,
    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    @schmosy Machst Du Form mit oben 7 Button (Data, Save, Load, Visible, First, Last, Delete Row 3) und drunter ein DataGridView.
    Spiele ein wenig damit, um das Konzept zu verstehen:
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private table As DataTable
    3. Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    4. InitDataTable()
    5. InitData()
    6. End Sub
    7. Private Sub InitDataTable()
    8. Me.table = New DataTable("Sinus")
    9. ' für das DGV
    10. Me.table.Columns.Add(New DataColumn() With { _
    11. .ColumnName = "Coordinate", _
    12. .DataType = GetType(Double) _
    13. })
    14. ' für das DGV
    15. Me.table.Columns.Add(New DataColumn() With { _
    16. .ColumnName = "Value", _
    17. .DataType = GetType(Double) _
    18. })
    19. End Sub
    20. Private Sub InitData()
    21. ' DataSource löschen
    22. Me.table.Clear()
    23. Me.DataGridView1.DataSource = Nothing
    24. End Sub
    25. Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    26. ' Hier werden die Daten bereitgestellt:
    27. Me.table.Clear()
    28. For i As Integer = 0 To 100
    29. Dim newRow As DataRow = Me.table.NewRow()
    30. newRow(0) = i
    31. newRow(1) = Math.Sin(i / 10)
    32. Me.table.Rows.Add(newRow)
    33. Next
    34. Me.DataGridView1.DataSource = Me.table
    35. Me.DataGridView1.Columns(1).DefaultCellStyle.Format = "0.0000"
    36. End Sub
    37. Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
    38. Using dlg As New SaveFileDialog
    39. dlg.Filter = "XML-Dateien|*.xml"
    40. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    41. Return
    42. End If
    43. Me.table.WriteXml(dlg.FileName)
    44. End Using
    45. End Sub
    46. Private Sub Button3_Click(sender As System.Object, e As System.EventArgs) Handles Button3.Click
    47. Using dlg As New OpenFileDialog
    48. dlg.Filter = "XML-Dateien|*.xml"
    49. If dlg.ShowDialog <> Windows.Forms.DialogResult.OK Then
    50. Return
    51. End If
    52. Me.table.ReadXml(dlg.FileName)
    53. End Using
    54. Me.DataGridView1.DataSource = Me.table
    55. End Sub
    56. Private Sub Button4_Click(sender As Object, e As EventArgs) Handles Button4.Click
    57. Me.DataGridView1.Columns(1).Visible = Not Me.DataGridView1.Columns(1).Visible
    58. End Sub
    59. Private Sub Button5_Click(sender As Object, e As EventArgs) Handles Button5.Click
    60. Me.DataGridView1.CurrentCell = Me.DataGridView1(0, 0)
    61. End Sub
    62. Private Sub Button6_Click(sender As Object, e As EventArgs) Handles Button6.Click
    63. If Me.DataGridView1.AllowUserToAddRows Then
    64. Me.DataGridView1.CurrentCell = Me.DataGridView1(0, Me.DataGridView1.Rows.Count - 2)
    65. Else
    66. Me.DataGridView1.CurrentCell = Me.DataGridView1(0, Me.DataGridView1.Rows.Count - 1)
    67. End If
    68. End Sub
    69. Private Sub Button7_Click(sender As Object, e As EventArgs) Handles Button7.Click
    70. Me.table.Rows.RemoveAt(3)
    71. Me.DataGridView1.CurrentCell = Me.DataGridView1(0, 3)
    72. End Sub
    73. End Class
    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).
    VB-Fragen über PN / Konversation werden ignoriert!

    schmosy schrieb:

    arbeite das erste Mal mit VB

    Und zwar mit VB.NET, nicht VB6. Bitte demnächst beachten. Siehe auch: [Allgemein] VB.NET, VB6, VBA, VBS — Mit welcher Sprache programmiere ich eigentlich?
    Besucht auch mein anderes Forum:
    Das Amateurfilm-Forum
    @RodFromGermany, danke für den Code! Der hat mir auf jeden Fall sehr geholfen. Ich hab das jetzt auch soweit geschrieben, bzw. habe den form2.designer.vb benutzt, da dort schon alles initiallisiert wurde... eine Frage hätte ich da noch:
    Wenn ich nun die gefüllte Tabelle schließe, um zurück zum Hauptfenster zu kommen, und dann die Tabelle wieder erneut öffne, ist die Tabelle leer. Sprich ich müsste die xml Datei wieder hochladen, um die Zahlen zu sehen. Das Programm generiert also die Tabelle komplett neu (?)... muss man da etwas bestimmtes einstellen oder es explizit programmieren, dass die Zahlen auch in der Tabelle bleiben, sobald man das Fenster schließt?
    @schmosy Dann musst Du Dir diese Tabelle in Form1 merken und als Property von Form2 aus verwenden.

    VB.NET-Quellcode

    1. ' in Form1
    2. Dim Tabelle As DataTable
    3. ' ---
    4. Using dlg = New Form2
    5. dlg.Tabelle = Me.Tabelle
    6. dlg.ShowDialog()
    7. Me.Tabelle = dlg.Tabelle
    8. End Using

    VB.NET-Quellcode

    1. ' in Form2
    2. If Me.Tabelle = Nothing Then
    3. Me.Tabelle = New DataTable
    4. ' ...
    5. End If

    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).
    VB-Fragen über PN / Konversation werden ignoriert!
    nur zur Klarstellung: Was Rod dir da gegeben hat ist mitnichten das, was ich dir empfohlen hätte, und ist insbesondere kein typisiertes Dataset, sondern ein untypisiertes (nichtmal - ist ja nur 1 untyp. Datatable).
    Aber es ist leichter zu vermitteln, denn was ich empfehle, arbeitet mit grafischen Programmier-Techiken, und solch kann man halt nicht als Code posten und dann einkopieren - denn bei grafischer Programmierung erreicht man seine Ziele ohne (sichtbaren) Code.

    Ich will das jetzt nicht ganz schlecht machen (nur ein bischen :evil: ), sondern drauf hinweisen, dasses quasi nur die halbe Miete ist, und bei anspruchsvolleren Problemstellungen ziemlich ineffizient, fehleranfällig und unpraktikabel wird.

    Also negativ ausgedrückt: Es ist nur die halbe Miete :thumbdown:
    Und positiv: Es ist immerhin schoma die halbe Miete :thumbsup:
    Damit meine ich, dass die grafischen Programmiertechniken im Hintergrund teilweise den gleichen Code generieren würden, wie er hier händisch eingetippt wurde, und daher ist das hier sicherlich sehr hilfreich beim Verständnis grafischer Programmiertechniken - wenn du iwann da mal dran gerätst.

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „ErfinderDesRades“ ()

    Ja ich hab auch nur das Speichern/Laden genommen bzw. das Verständnis wie es allg. aussehen kann. Dass man die Zahlen als eine Datei speichern kann, ist für mein Vorhaben ganz praktisch.
    Letzendlich hab ich 3 Tabellen gebraucht (Temperatureinstellung, Magnetfeldeinstellung und Druckeinstellung), die ich nun in einem DataSet gepackt und die Datenquellen in die Form2 platziert habe. Hatte ursprünglich vor, die Tabellen einzelnd zu öffnen ^^ Naja ich werde sehen, obs später mir hilft oder schadet ...
    Ui - du bist bereits jetzt schon mit 3 Tabellen unterwegs?
    Also dann halt die Augen offen, und wenn was du treibst, anfängt, dir iwie umständlich vorzukommen, scheu dich nicht zu fragen.
    Wie gesagt: VisualBasic/VisualStudio hat noch einiges mehr zu bieten dem, der danach fragt.

    Mit "Learning by Doing" allein kommt man da aber nicht mehr hin, denn die Konzepte sind teilweise so trickreich und mächtig - da kann man als Self-Teacher schon deshalb nicht drauf kommen, weil man sich garnet vorstellen kann, dass sowas möglich ist.