2016-03-29 6 views
0

In meinem ersten Versuch, DataGridView in einer nützlichen Anwendung zu verwenden, bin ich froh, dass ich viele nützliche Beiträge gefunden habe, die mir geholfen haben, eine rudimentäre & App zu erstellen . Meine DataGridView ist derzeit ein festes 4-Spalten-Raster, das Daten aus einer MySQL-Datenbank abfragt. Spalte 4 muss ein Hyperlink-Typ der Spalte sein. Wenn ich den folgenden Code zum ersten Mal ausführen, über eine Taste, die Ergebnisse sind genau das, was ich erwarte, und ich bin voller Freude:DataGridView-Spalten funktionieren nach dem Löschen von Daten und Neuauffüllen von Spalten nicht mehr

Good Execution

Die Code get-Taste ist:

Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles btn_GetData.Click 
    cnString = "datasource=" + ip + ";username=" + username + ";password=" + password + ";database=" + database_name + "" 
    sqlQRY = "Select * from " + table_name + " WHERE Batch =" + txt_PalletNo.Text + "" 

    If txt_PalletNo.Text = "*" Then 
     sqlQRY = "Select * from " + table_name + "" 
    Else 
     sqlQRY = "Select * from " + table_name + " WHERE Batch =" + txt_PalletNo.Text + "" 
    End If 

    conn = New MySqlConnection(cnString) 

    Try 
     conn.Open() 
     da = New MySqlDataAdapter(sqlQRY, conn) 
     Dim cb As MySqlCommandBuilder = New MySqlCommandBuilder(da) 
     da.Fill(ds, "" + table_name + "") 
     DataGridView1.DataSource = ds 
     DataGridView1.DataMember = "" + table_name + "" 
     txt_qty.Text = DataGridView1.RowCount 
     DataGridView1.DataSource = ds 
     DataGridView1.DataMember = "" + table_name + "" 

    Catch ex As Common.DbException 
     MsgBox(ex.ToString) 
    Finally 
     txt_PalletNo.Clear() 
     conn.Close() 
    End Try 
End Sub 

Wenn ich jedoch eine Schaltfläche verwende, um das Raster zu löschen und eine neue Datenmenge anzufordern, scheinen sich die Spalteneigenschaften zu ändern, die Spalten ändern sich und die Spalte 4 scheint in eine normale Textspalte zu wechseln, wie hier gezeigt: Bad execution

Die klare Tastencode ist:

Private Sub btn_Clear_Click(sender As System.Object, e As System.EventArgs) Handles btn_Clear.Click 
    DataGridView1.DataSource = Nothing 
    ds.Clear() 
    DataGridView1.Rows.Clear() 'I also tried Columns.Clear() Here 
    txt_PalletNo.Clear() 
    txt_qty.Clear() 
End Sub 

ich verstehen müssen helfen, was passiert, wenn ich die Funktion ausgeführt, dass das Gitter ein zweites Mal oder drittes Mal auffüllt. Ich dachte, das Löschen des Datensatzes und das Ausführen der Funktion würden jedes Mal die gleichen Spalteneigenschaften ergeben. Um demütig und ehrlich zu sein, ist dies mein erster Versuch DataGridView zu benutzen, so dass mein Wissen sehr begrenzt ist. Ich hoffe, dass es eine einfache Eigenschaft ist, die ich nicht richtig ausgewählt habe.

Alle Hinweise würden sehr geschätzt werden.

+1

Ich glaube nicht, das es sein sollte ds.Clear() – Claudius

+0

Von diesen Symptomen würde ich sagen, dass Sie Ihre Spalten mit dem Designer definiert haben und Nach Löschen löscht man jede im Designer vorgenommene Einstellung. Übrigens, warum Sie die Variable table_name mit leeren Strings verketten? – Steve

+0

Versuchen Sie, 'DataGridView1.AutoResizeColumns()' zu Ihrer Laderoutine hinzuzufügen. – rheitzman

Antwort

1

Nicht verwenden ds.clear Sie müssen eine neue Instanz erstellen. Wenn u löschen müssen ds neue Instanz erstellen und füllen Sie ihn wieder

ds = new dataSet 
Verwandte Themen