【问题标题】:DataGridView is not displaying my delete buttonDataGridView 没有显示我的删除按钮
【发布时间】: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


【解决方案1】:

首先删除这一行:

  dgv_myOrder.Columns.Add(btn)

不要将按钮添加到代码中的 datagridview 中,从设计器创建它并为其他列使用绑定。

步骤:

1 .使用 datagridview 右上角的添加列按钮创建所有 datagrdiview 列

this is how you add columns

2 . 添加列后,像这样将每一列绑定到数据库中的相关列,当您在 datagidview 设计器中单击 EditColumns 时,您可以得到此窗口,更改每列属性中的DataPropertyName 更改它到您希望它预览但不将其添加到删除列按钮的数据表列名称的名称:

Binding the columns

3 .转到 datagridview 中删除按钮列的属性,您将在其中找到名为 DefalutCellStyle 的属性,将找到 NullValue 将其更改为“删除”。

Change the null value

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多