DataGridView 保存修改后的数据到数据库
DataGridView中有我已经查询到的内容,我想再DataGridView中直接修改数据后点击保存按钮就可以把修改厚后的内容保存。
Private selectCommand As New SqlCommand
Private dataAdapter As New SqlDataAdapter
Private sqlConn As New SqlConnection
‘查询数据库,填充DataGridView
Private Sub RecordCheck_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
sqlstr = "select * from AddFreon order by EndTime Desc"
Dim connStr As String = System.Configuration.ConfigurationManager.AppSettings("connFreon")
sqlConn = New SqlConnection(connStr)
If sqlConn.State = ConnectionState.Closed Then
sqlConn.Open()
End If
selectCommand = sqlConn.CreateCommand()
selectCommand.CommandText = sqlstr
dataAdapter = New SqlDataAdapter
dataAdapter.SelectCommand = selectCommand
Dim data As DataTable = New DataTable()
dataAdapter.Fill(data)
DataGridView1.DataSource = data
Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dataAdapter)
dataAdapter.InsertCommand = builder.GetInsertCommand()
dataAdapter.DeleteCommand = builder.GetInsertCommand()
End Sub
'保存修改后的内容到数据库
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Text = "修改"
Dim data As DataTable = New DataTable
data = Me.DataGridView1.DataSource
Dim changedData As DataTable = New DataTable
changedData = data.GetChanges()
If Not changedData Is Nothing Then
dataAdapter.Update(changedData)
data.AcceptChanges()
end if
End Sub
为什么会将修改后的内容已一条新的纪录添加进来?
[解决办法]
检查你数据库的主键,如果没有把它加进Datatable,那么就肯定会这样
[解决办法]
问题挺简单的,不要郁闷,如果你数据库的主键是“Id”,照一下代码试试,不行等会给你发给重写CommandText的。代码别写那么复杂
Private selectCommand As New SqlCommand Private dataAdapter As New SqlDataAdapter Private sqlConn As New SqlConnection '查询数据库,填充DataGridView Private Sub RecordCheck_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Dim sqlstr = "select * from AddFreon order by EndTime Desc" Dim connStr As String = System.Configuration.ConfigurationSettin.AppSettings("connFreon") sqlConn = New SqlConnection(connStr) If sqlConn.State = ConnectionState.Closed Then sqlConn.Open() End If selectCommand = sqlConn.CreateCommand() selectCommand.CommandText = sqlstr dataAdapter = New SqlDataAdapter dataAdapter.SelectCommand = selectCommand Dim data As DataTable = New DataTable() data.Columns.Add("id", GetType(Integer)) data.Columns("id").AutoIncrement = True data.Columns("id").AutoIncrementSeed = -1 data.Columns("id").AutoIncrementStep = -1 data.PrimaryKey = New DataColumn() {data.Columns("id")} dataAdapter.Fill(data) DataGridView1.DataSource = data Dim builder As SqlCommandBuilder = New SqlCommandBuilder(dataAdapter) 'dataAdapter.InsertCommand = builder.GetInsertCommand() 'dataAdapter.DeleteCommand = builder.GetInsertCommand() End Sub '保存修改后的内容到数据库 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Button1.Text = "修改" 'Dim data As DataTable = New DataTable 'data = Me.DataGridView1.DataSource 'Dim changedData As DataTable = New DataTable 'changedData = data.GetChanges() Dim changedData As DataTable = Me.DataGridView1.DataSource() If Not changedData Is Nothing Then dataAdapter.Update(changedData) 'changedData.AcceptChanges() End If End Sub
[解决办法]
数据库的主键