Ich fing an, auf Anfrage meines Arbeitgebers Visual Basic
zu lernen, und ich habe einen Punkt in meinem Lernprojekt erreicht, das mich frustriert.Visual Basic 2015: Auffüllen eines ListView von SQL-Verbindung
Ich versuche in meiner SQL-Datenbank ein Listview unter Verwendung von Daten aus einer bestimmten Tabelle zu füllen, aber ich erhalte die gleichen Fehler, egal wie ich versuche, es zu beheben:
Argument Out of Range Exception - Invalid Argument=Value of '1' is not valid for 'index'.
Hier die ist Code, der die Ausnahme der Erzeugungs:
Private Sub MasterListSeries_Load(sender As Object, e As EventArgs) Handles MyBase.Load
lvMasterListSeries.Columns.Add("Unique ID", 75, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Working Title", 100, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Book Count", 75, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Genre", 75, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Published Title", 100, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Date Started", 85, HorizontalAlignment.Center)
lvMasterListSeries.Columns.Add("Date Completed", 85, HorizontalAlignment.Center)
Using myConnection As New SqlConnection(dbConnection)
myConnection.Open()
Dim Count As Integer
Dim i As Integer = 0
Using CountRows As New SqlCommand("SELECT Count(uniqueID) FROM tblSeries", myConnection)
Count = Convert.ToDecimal(CountRows.ExecuteScalar)
End Using
Using querySeries As New SqlCommand("SELECT uniqueID, workingtitle, forecastedbookcount, genre, publishedtitle, datestarted, datecompleted FROM tblSeries", myConnection)
Dim qsResult As SqlDataReader = querySeries.ExecuteReader()
While qsResult.Read
i = Convert.ToDecimal(qsResult("uniqueID"))
lvMasterListSeries.Items.Add(New ListViewItem(Convert.ToString(qsResult("uniqueID"))))
lvMasterListSeries.Items(i).SubItems(1).Text = Convert.ToString(qsResult("workingtitle"))
lvMasterListSeries.Items(i).SubItems(2).Text = Convert.ToString(qsResult("forecastedbookcount"))
lvMasterListSeries.Items(i).SubItems(3).Text = Convert.ToString(qsResult("genre"))
lvMasterListSeries.Items(i).SubItems(4).Text = Convert.ToString(qsResult("publishedtitle"))
lvMasterListSeries.Items(i).SubItems(5).Text = Convert.ToString(qsResult("datestarted"))
lvMasterListSeries.Items(i).SubItems(6).Text = Convert.ToString(qsResult("datecompleted"))
End While
End Using
End Using
End Sub
die Ausnahme tritt auf der dritten Zeile der While qsResult.Read
Sequenz.
Ich habe zwei Threads auf Stack Overflow, zwei Threads auf Dream_In_Code und eine andere auf Code Guru gelesen ... alles vergebens.
Ich habe eine Frage in MSDN Community-Foren gefunden, aber es scheint Datasets zu verwenden, während ich versuche, ADO.NET mit aktiven Verbindungen zu lernen ... und ich fürchte, ich konnte es nicht konvertieren in etwas Brauchbares für mich.
Hier ist ein Screenshot der Debug-Fenster von Visual Studio:
Die ListView
(nach Bevölkerung) so etwas wie die Ergebnisse der SQL-Abfrage hier gezeigt aussehen:
Ich freue mich über jede Hilfe, und ich danke Ihnen, dass Sie sich die Zeit genommen haben, dies zu lesen.
Sie versuchen, 'SubItems (1)' zu verwenden, die zu diesem Zeitpunkt nicht existiert. Das verursacht den Fehler. Ich bin nicht vertraut mit diesen Steuerelementen, aber Sie müssen wahrscheinlich '.SubItems.Add (someNewSubItem)' nach dem Erstellen eines richtigen 'someNewSubItem' -Objekts (die möglicherweise bereits die Eigenschaft Text enthalten) .. –