从DataGridView更新到数据库

时间:2018-09-11 13:32:12

标签: vb.net

Dim sb As New MySqlConnectionStringBuilder
sb.Server = Form1.hostname.Text
sb.UserID = Form1.rootuser.Text
sb.Password = Form1.rootpassword.Text
sb.Database = Form1.hostdb.Text
sb.Port = Form1.hostport.Text
Using connection As New MySqlConnection(sb.ConnectionString)
    Try
        connection.Open()
        Dim adapter1 As New MySqlDataAdapter(TextBox1.Text, connection)
        Dim cmdb1 = New MySqlCommandBuilder(adapter1)
        Dim ds As New DataSet
        Dim words As String() = TextBox1.Text.Split(New Char() {" "c})
        Dim tablenamewords = (words(3))
        adapter1.Update(ds, tablenamewords)
    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        connection.Dispose()
    End Try
End Using

这给了我这个错误:

  

更新无法找到TableMapping ['creature_template']或DataTable'creature_template'。

我想选择项目,然后使用DataGrid更新它们。

注意:tablenamewords = "creature_template"

1 个答案:

答案 0 :(得分:0)

您可以通过许多不同的方法解决此问题。

我希望每次用户结束编辑单元格时都使用单个查询来更新数据库。

首先,您已绑定到您的DataGridView

如何绑定源:

  • 转到您的应用程序设计,然后单击DataGridView
  • 单击pause/start之类的小按钮,如下所示:

little button

  • 单击如图所示的标记为“选择数据源”的“ ComboBox”之类的文本框,然后单击它:

"Scegli origine dati means "chose data source"

  • 它将打开一个“表单”,单击Add data source,如图所示:

aggiungi origine dati means "add data source"

  • 按照向导进行操作,无需任何进一步的说明!

做得好,您差不多完成了。只需输入您的代码,然后查找此子项即可:

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Me.your_table_nameTableAdapter.Fill(Me.your_db_nameDataSet.your_table_name)
End Sub

Form1_Load子内部的行将在DataGridView内上传数据,如果要使用表单加载或将其剪切/粘贴到任意位置,则将其保留在那里。

现在您可以添加此代码以编程方式更新数据库:

Private Sub DataGridView1_CellEndEdit(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles DataGridView1.CellEndEdit
    Try
        Dim location As Point = DataGridView1.CurrentCellAddress
        Dim sqlCmd As String = "UPDATE table_name SET " & _
                                    DataGridView1.Columns(location.X).Name.Replace("DataGridViewTextBoxColumn", "") & " = @Data " & _
                                    "WHERE " & _
                                    DataGridView1.Columns(0).Name.Replace("DataGridViewTextBoxColumn", "") & " = @ID"
        Using myConn As New SqlConnection(My.Settings.VISURE_DA_PDFConnectionString)
            myConn.Open()
            Using myCmd As New SqlCommand(sqlCmd, myConn)
                myCmd.Parameters.Add("@Data", SqlDbType.VarChar)
                myCmd.Parameters.Add("@ID", SqlDbType.Int)
                myCmd.Parameters("@Data").Value = DataGridView1.Rows(location.Y).Cells(location.X).Value
                myCmd.Parameters("@ID").Value = DataGridView1.Rows(0).Cells(location.X).Value
                myCmd.ExecuteNonQuery()
            End Using
            myConn.Close()
        End Using
    Catch ex As Exception
        Err.Clear()
    End Try
End Sub

备注:

  • location.X是col索引,location.Y是行索引

  • DataGridView1.Columns(0).Name这是我的ID(主键),它始终在第一列中。随便更改。

  • 如果您要获取列名,请不要忘记添加.Replace("DataGridViewTextBoxColumn", "")

如前所述,每次用户在DataGridView上编辑一个单元格时,此代码将更新您的数据库。这不是什么大问题,因为如果您要编辑两个或两个以上的单元格,则每次离开一个已编辑的单元格都会触发方法DataGridView1_CellEndEdit

相关问题