【问题标题】:Adding, Editing and Deleting data from Datagridview从 Datagridview 添加、编辑和删除数据
【发布时间】:2017-07-04 21:36:11
【问题描述】:

我正在尝试将 datagridview 控件中的数据插入到我的 SQL 数据库中。代码如下:

Private Sub MCmdSoftwareSave_Click(sender As Object, e As EventArgs) Handles MCmdSoftwareSave.Click
    Dim ID As Integer
    Dim Name, Edition, Version, SubVersion As String
    Try
        SQLcmd.Connection = SQLconn
        SQLconn.Open()
        For row As Integer = 0 To Me.DgdSoftware.Rows.Count - 1
            ID = Me.DgdSoftware.Rows(row).Cells(0).Value
            Name = Me.DgdSoftware.Rows(row).Cells(1).Value
            Edition = Me.DgdSoftware.Rows(row).Cells(2).Value
            Version = Me.DgdSoftware.Rows(row).Cells(3).Value
            SubVersion = Me.DgdSoftware.Rows(row).Cells(4).Value
            SQLcmd.CommandText = "INSERT INTO Software(ID,Name,Edition,Version,SubVersion) VALUES('" & ID & "','" & Name & "','" & Edition & "','" & Version & "','" & SubVersion & "')"
            SQLcmd.ExecuteNonQuery()
        Next
        MsgBox("The infomration was successfully added to the Software database.", MsgBoxStyle.Information, "Successful Operation")
    Catch ex As Exception
        MessageBox.Show(ex.Message)
        SQLconn.Close()
    End Try
End Sub

这在表为空时有效,但在添加所需数据之前,它还会添加另一条记录,其中“ID”(主键)为 0,该记录中的其余字段为空。

如果我随后尝试添加更多数据,我会收到一条消息,提示我无法将数据添加到数据库中,其中正在保存的当前记录的 ID 与数据库中的 ID 匹配(即它正在尝试重新保存现有数据到表中)。

我想要做的是加载一个表单,其中表中的所有数据都加载到 datagridview 控件中。然后,我希望能够通过放入新记录来使用相同的 datagridview 控件添加到该表,而无需代码尝试保存现有数据。我还希望能够编辑和删除 datagridview 控件中的数据。

有什么方法可以有效地做到这一点?

非常感谢,

詹姆斯

【问题讨论】:

  • 永远不要连接字符串来生成 SQL - 使用 SQL 参数。它避免了许多可以避免的问题......而且它更简单。如果您使用数据源,则不需要这些 - NET 对象将为您更新数据库
  • 我已将数据源设置为我的表 (SoftwareBindingSource),但它不会自动更新。
  • 它正在尝试 - 这就是您收到错误的原因。当您对数据进行更改时,它会自动更新基础表。然后使用 DataAdapter 将所有更改(1 到 1,000)发送到 DB 不需要新的 SQL - NET 对象是 smart
  • @Plutonix 啊,很公平,我不知道。我将如何使用数据适配器发送数据,我假设一些由按钮触发的代码?

标签: sql sql-server vb.net


【解决方案1】:

我能想到的最简单的方法是在 datagridview 中添加另一列,您可以将其视为该行是否已插入数据库的指示器。默认为 0,并在 for 循环中检查以仅插入该列值为 0 的行,然后将其更新为 1。

你也应该看看using parameterized SQL queries

如果您将 AllowUserToAddRows 设置为 True,则 datagridview 底部将有一个空白行。您可以通过将 for 循环从 0 更改为 Me.DgdSoftware.Rows.Count - 2 来解决此问题。

【讨论】:

  • 谢谢,我去看看
  • 你也可以使用DataTable.Rows(n).RowState
【解决方案2】:

补充@obl 的答案,阅读datagridview events 文档。

您可以使用CellEndEdit 事件标记一行,并在您单击保存按钮时知道该行是否需要删除或更新。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多