【问题标题】:Update From DataGridView to Database从 DataGridView 更新到数据库
【发布时间】:2018-09-11 13:32:11
【问题描述】:
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"

【问题讨论】:

  • 你的datagridview绑定到你的数据库了吗?
  • ` Dim adapter1 As New MySqlDataAdapter(InfluenceMultiLineTextBox1.Text, cn) Dim table As New DataTable() adapter1.Fill(table) DataGridView1.DataSource = table`
  • 鉴于 C# 和 VB 之间的相似性,这里是否有任何 cmets 适用:stackoverflow.com/questions/26946397/…?
  • 这不会有什么帮助,但既然你有一个Using connection ...,你就不需要Finally ... connection.Dispose(),因为End Using在任何情况下都会自动调用dispose。

标签: vb.net


【解决方案1】:

你可以用很多不同的方法来解决这个问题。

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

但首先你必须绑定一个源到你的DataGridView

如何绑定源:

  • 点击 DataGridView 转到您的应用程序设计
  • 点击pause/start点赞小按钮如图:

  • 点击“ComboBox”,如图所示标记为“选择数据源”的文本框并点击它:

  • 会打开一个“表单”,点击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 Sub 中的行将上传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 是列索引,location.Y 是行索引

  • DataGridView1.Columns(0).Name 这是我的ID(主键),它总是在第一列。用你的来改变它。

  • 获取列名时不要忘记添加.Replace("DataGridViewTextBoxColumn", "")

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

【讨论】:

  • 这不起作用仅仅是因为该人将使用随机列和随机名称,因此没有指定:数据 - ID 等...
  • @JohnEvenetcha 正如我之前问过的,您是否将 DataGridView 绑定到您的数据库?如果是,则列名称和顺序将与您的表格中的相同。
  • 我不明白它是如何绑定的 .. 我的意思是如果它是绑定的,那么在 datagridview 中更改任何内容也将更新到数据库,我想要我的意思是如果我知道如何做到这一点而不是我赢了不要要求它:D 好吧,我认为您不理解我的观点,但感谢您至少尝试过帮助。
  • 我将编辑答案以帮助您进行绑定。据我所知,如果数据库绑定到数据网格,我也没有找到更新数据库的方法。唯一的办法就是查询更新
  • 已经存在检查图片.. 好吧,我找到了一个 youtube 视频,我会提前尝试它的 vb.net !
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 2015-05-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多