Listview mit Datensätzen aus lokaler Datenbank füllen

  • VB.NET
  • .NET 4.0

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von LizardProgrammer.

    Listview mit Datensätzen aus lokaler Datenbank füllen

    Hallo zusammen,

    ich möchte ein Listview mit Daten aus einer lokalen .sdf Datenbank füllen.
    Beim Befüllen bricht er aber schon in der ersten Zeile ab.
    Die erste und 2. Spalte wird richtig ausgefüllt.

    Hat jemand von Euch eine Idee wie ich das Listview mit dem Code befüllen kann?

    VB.NET-Quellcode

    1. Dim con As New SqlServerCe.SqlCeConnection
    2. Dim cmd As New SqlServerCe.SqlCeCommand
    3. Dim reader As SqlServerCe.SqlCeDataReader
    4. Try
    5. con.ConnectionString = "Data Source=Datenbank.sdf"
    6. cmd.Connection = con
    7. cmd.CommandText = "select * from Testtabelle"
    8. con.Open()
    9. reader = cmd.ExecuteReader()
    10. ListView1.Items.Clear()
    11. Do While reader.Read()
    12. ListView1.Items.Add(reader("Erste"))
    13. ListView1.Items(0).SubItems.Add(reader("Zweite"))
    14. ListView1.Items(1).SubItems.Add(reader("Dritte"))
    15. Loop
    16. reader.Close()
    17. con.Close()
    18. Catch ex As Exception
    19. MsgBox(ex.Message)
    20. End Try
    21. End Sub
    Hab den Try catch mal entfernt und erhalte folgende Fehlermeldung:

    "Eine nicht behandelte Ausnahme des Typs "System.ArgumentOutOfRangeException" ist in System.Windows.Forms.dll aufgetreten.
    Zusätzliche Informationen: InvalidArgument=Value mit dem Wert 1 ist für index ungültig."


    Das Programm stürzt ab und es kommt die o.g. Fehlermeldung sobald ich in Zeile 18 versuche "ListView1.Items(1)...." anstatt "ListView1.Items(0)...." anzuwenden.

    Die Datenbank enthält 3 Spalten, die in meinem Listview das ebenfalls 3 Spalten enthält 1:1 eingetragen werden sollen.

    VriL schrieb:

    Listview
    Da würde ich zunächst ein DataGridView draus machen, da kannst Du unter anderem z.B. mit Zeilen- und Spalten-Indizes arbeiten.
    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!
    naja, wenn schon andere Technologie, dann aber gleich richtig. Also mit typisiertem Dataset, DataAdapter, Databinding, aber ohne DataReader.
    Noch besser erstmal ohne Datenbank, weil ist überaus vorteilhaft, DB als andere Baustelle zu betrachten, die man sich gesondert vorknöpft:
    Daten laden, speichern, verarbeiten - einfachste Variante

    Aber man kann an dieser Listview-Geschichte Grundlagen lernen.
    Zum Beispiel, wenn man ein Item nicht zuvor added, dann kann man es in Folge (zeile#18) auch nicht zugreifen.
    zeile#17 greift ja noch das zuvor geaddete Item zu, #18 halt nicht mehr.

    Kann man noch mehr dran lernen - nämlich, dass Add-Methoden auch Rückgabewerte haben können, und wenn das der Fall ist, ist das meistens äusserst praktisch.
    @TE: Welchen Rückgabewert hat die benutzte Add-Methode?

    Auch kann man sehen, dass du dein VisualStudio noch mit den Anfänger-Einstellungen benutzst. Damit kann man eiglich überhaupt nicht programmieren lernen, also stell möglichst unverzüglich um:
    Visual Studio - Empfohlene Einstellungen
    Vielen Dank für Eure Antworten.
    Ich hab die Daten in ein Datagridview anstatt in ein Listview geschrieben das tuts auch :)

    Hier der Code

    VB.NET-Quellcode

    1. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    2. Dim con As New SqlServerCe.SqlCeConnection
    3. Dim cmd As New SqlServerCe.SqlCeCommand
    4. Dim ds As New DataSet
    5. Dim dt As New DataTable
    6. Dim da As New SqlServerCe.SqlCeDataAdapter
    7. con.ConnectionString = "Data Source=Datenbank.sdf"
    8. cmd.Connection = con
    9. cmd.CommandText = "select * from Testtabelle"
    10. con.Open()
    11. ds.Tables.Add(dt)
    12. da = New SqlServerCe.SqlCeDataAdapter("select * from Testtabelle", con)
    13. da.Fill(dt)
    14. DataGridView1.DataSource = dt.DefaultView
    15. con.Close()
    16. End Sub
    Hallo :)

    Wie gehe ich beim Einlesen vor, wenn ich mehrere Datenbanken mit einem Button einlesen möchte?
    Die Datenbank-Dateien (.accdb) möchte ich über den Pfad ansprechen. Wie kann ich dann auf die ganzen Datenbanken zugreifen?

    Edit by hal2000: Bitte ggf. einen neuen Thread erstellen. Closed.

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „hal2000“ ()