DGV füllt sich nicht

  • VB.NET

Es gibt 13 Antworten in diesem Thema. Der letzte Beitrag () ist von ThunderFrog.

    DGV füllt sich nicht

    Hallo Community,
    Ich versuche derzeit (verzweifelt) ein DGV zu füllen.
    Alles soweit, sogut jedoch bekomme ich eine Fehlermeldung.

    Fehlermeldung:
    Der Eingabearray ist länger als die Anzahl der Spalten in dieser Tabelle.

    Code:

    VB.NET-Quellcode

    1. Imports MySqlLib3
    2. Public Class Form1
    3. Public db As New MySqlLib("http://test.funkspiel-bos-funk.de/sql/query.php", True)
    4. Public dt As New DataTable
    5. Public ds As New DataSet
    6. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    7. Dim lesen As MySqlLib.ResultCollection = db.Query("SELECT * FROM login")
    8. dt.Clear()
    9. ds.Tables.Add(New DataTable)
    10. dt.Rows.Add(lesen) 'hier soll der fehler sein
    11. DataGridView1.DataSource = dt
    12. End Sub
    13. End Class

    Das ist halt der Nachteil, wenn man nicht mit typisiertem Dataset abeiten möchte. Da muß man sich um alles selber kümmern. Also auch darum, dass die Tabelle über die richtige Anzahl an Spalten verfügt. Hat dein Datensatz inner DB 12 Spalten und deine Datatable (da mit New gerade instanziert) gakeine, würde die add-Methode über den Rand schreiben.
    Kläre also vorher, wieviele Spalten dein "lesen" hat und füge die Spalten dt hinzu.

    Fiel Fergnügen

    Vatter
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Du meinst bei dt.Rows.Add die Spalten manuell einfügen ??
    Beispiel

    VB.NET-Quellcode

    1. dt.Rows.Add("ID")
    2. dt.Rows.Add("Name")


    oder habe ich was falsch verstanden

    Ich habs mitlerweile soweit das es schonmal ins DGV schreibt jedoch nich so ganz wie es soll.

    Mein Aktueller Code:

    VB.NET-Quellcode

    1. Imports MySqlLib3
    2. Public Class Form1
    3. Public db As New MySqlLib("http://test.funkspiel-bos-funk.de/sql/query.php", True)
    4. Public dt As New DataTable
    5. Public ds As New DataSet
    6. Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
    7. Dim lesen As MySqlLib.ResultCollection = db.Query("SELECT * FROM login")
    8. dt.Clear()
    9. With dt.Columns.Add(lesen.Row(0).Column("ID"))
    10. dt.Columns.Add(lesen.Row(0).Column("Benutzername"))
    11. dt.Columns.Add(lesen.Row(0).Column("Passwort"))
    12. End With
    13. dt.Rows.Add(lesen)
    14. DataGridView1.DataSource = dt
    15. End Sub
    16. End Class


    Nun schreibt er mir den Inhalt der Spalten aus der DB in den Kopf und nicht in die Spalte.
    Ich hatte es mit einem DataSet versucht, kam damit jedoch nich so ganz klar

    Patrick1993 schrieb:

    dt.Columns.Add(lesen.Row(0).Column("Benutzername"))

    Logisch:
    dt.Columns.Add = Adde eine Spalte zur Datatable. Diese Methoden möchte als Parameter den Namen der Spalte als String (Steht alles in der Intellisense und wird beim Tippen angezeigt)
    Dein Spaltenname ist nun lesen.Row(0).Column("Benutzername") also der Wert aus der 1. Zeile(Index 0) der Spalte "Benutzername")
    Das ist also nicht das, was du möchtest.
    Versuch deshalb ma folgendes:
    Ich weis nicht, was lesen so zurückgibt. Es sollte da eine Liste geben, die die Columns listet. Da sollte es eine Eigenschaft Column.Name geben. Du kannst nun die Columnliste mit ForEach durchlaufen und die Namen-Eigenschaft der dataTable.Column zuordnen. Damit ist es denn egal, ob die Datenquelle 1 oder 100 Spalten hat.
    :thumbsup: Seit 26.Mai 2012 Oppa! :thumbsup:
    Ich habs zwar nicht mit DataSet gemacht aber ich habs so gelöst:

    VB.NET-Quellcode

    1. Dim lesen As String = db.Query("irgd")
    2. Dim count As lesen.row.count
    3. For i As Integer = 0 To count -1
    4. Dim sirgendwas As String = lesen.row(i).Column("Spalte")
    5. 'usw
    6. DataGridView1.Rows.Add(sirgendwas)
    7. End For


    So hab ichs gemacht, ist zwar nicht die besondere Art und Weise aber es funzt

    Danke für deine Hilfe, nur leider spuckt er mir diese Fehlermeldung aus:
    Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Zum DataGridView-Steuerelement können nur Zeilen hinzugefügt werden, die Spalten enthalten. Die Spalten müssen zuerst hinzugefügt werden.

    Mein Code:

    VB.NET-Quellcode

    1. Dim result As MySqlLib.ResultCollection = db.Query("SELECT `spalte1` FROM `tabelle`")
    2. For i As Integer = 0 To result.Row.Count - 1
    3. Dim sirgendwas As String = result.Row(i).Column("spalte1")
    4. 'usw
    5. main.DataGridView1.Rows.Add(sirgendwas)
    6. Next
    Mal eine andere Signatur ;)

    VB.NET-Quellcode

    1. Dim result As MySqlLib.ResultCollection = db.Query("SELECT `spalte1` FROM `tabelle`")
    2. Dim count as Integer = result.Row.Count
    3. For i As Integer = 0 To count - 1
    4. Dim sirgendwas As String = result.Row(i).Column("spalte1")
    5. 'usw
    6. DataGridView1.Rows.Add(sirgendwas)
    7. Next


    Machs so dann sollte es gehen und `spalte1` und `tabelle` musst du logischerweise Anpassen mit deinem Namen

    Ich ziehe meine Aussage zurück.
    Ich habe übersehen, dass es ein Objekt aus der MySqlLib ist.
    Die kenne ich nicht.
    Wenn's bei dir so funktioniert, ist das aber ziemlich verwirrend.
    Anscheinend hat Dodo die sonst übliche Mehrzahl-Schreibweise für Collections nicht übernommen.
    --
    If Not Program.isWorking Then Code.Debug Else Code.DoNotTouch
    --
    Ich bekomme bei diesem Code folgende Fehlermeldung:

    Eine nicht behandelte Ausnahme des Typs "System.InvalidOperationException" ist in System.Windows.Forms.dll aufgetreten.

    Zusätzliche Informationen: Zum DataGridView-Steuerelement können nur Zeilen hinzugefügt werden, die Spalten enthalten. Die Spalten müssen zuerst hinzugefügt werden.
    Mal eine andere Signatur ;)