【发布时间】:2019-02-17 17:29:54
【问题描述】:
我在第二次使用 DataGridView 加载数据时遇到问题。
这是我的 DataGridView,第一次加载数据时有一个删除按钮:
在我第二次加载数据时,这是我得到的错误:
单击Ok 后,DataGridView 中会发生以下情况:
删除按钮不见了。
这是我的代码:
Private Sub loaddata()
Dim con As New MySqlConnection
Dim cmd As New MySqlCommand
con.ConnectionString = "server=192.168.1.10;database=orderingsystem;username=server;password=server"
Dim da As New MySqlDataAdapter
Dim ds As New DataTable
Dim source As New BindingSource
Try
con.Open()
Dim query As String
Dim total As Double
Dim btn As New DataGridViewButtonColumn
btn.HeaderText = "Action"
btn.Text = "Delete"
btn.Name = "btn"
btn.UseColumnTextForButtonValue = True
query = "SELECT prodID, SUM(prodQty) as QTY, prodname as Name, prodPrice*SUM(prodQty) as Total from orderedlist where table_name = '" & Form1.Table_1.Name & "' GROUP BY prodID"
cmd = New MySqlCommand(query, con)
da.SelectCommand = cmd
da.Fill(ds)
source.DataSource = ds
dgv_myOrder.DataSource = ds
dgv_myOrder.Columns(0).Visible = False
For i As Integer = 0 To dgv_myOrder.Rows.Count - 1
total += Convert.ToDecimal(dgv_myOrder.Rows(i).Cells(3).Value).ToString("0.00")
Next
dgv_myOrder.Columns.Add(btn)
lbl_Total.Text = Decimal.Parse(total).ToString("0.00")
con.Close()
Catch ex As Exception
MessageBox.Show(ex.Message)
Finally
con.Dispose()
End Try
End Sub
Private Sub dgv_myOrder_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgv_myOrder.CellClick
If e.RowIndex = dgv_myOrder.NewRowIndex Or e.RowIndex < 0 Then
ElseIf e.ColumnIndex = dgv_myOrder.Columns("btn").Index Then
Dim connection As String = "server=192.168.1.10;database=orderingsystem;username=server;password=server;"
Dim con2 As New MySqlConnection(connection)
con2.Open()
Dim data As String = dgv_myOrder.SelectedRows(0).Cells(0).Value.ToString
Label2.Text = data
Dim rd2 As MySqlDataReader
Dim cmd2 As New MySqlCommand("UPDATE orderedlist SET cancelstatus = 1 WHERE prodID = '" & Label2.Text & "' and table_name = '" & Form1.Table_1.Name & "'", con2)
rd2 = cmd2.ExecuteReader
con2.Close()
con2.Open()
Dim rd3 As MySqlDataReader
Dim cmd3 As New MySqlCommand("UPDATE tableassistance SET cancellation = 1 WHERE table_name = '" & Form1.Table_1.Name & "'", con2)
rd3 = cmd3.ExecuteReader
MessageBox.Show("Wait for confirmation!", "System")
Me.Close()
Label2.Text = ""
End If
End Sub
我在表单加载中调用 loaddata()。
【问题讨论】:
-
1) 在设置
DataSource之前清除Columns集合。或者更好的选择 → 2) 只设置一次DataGridView列,然后使用LoadData方法来加载数据。 -
为什么要创建一个BindingSource,设置它的DataSource属性然后再不使用它?
标签: vb.net winforms datagridview