首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > VB Dotnet >

DataGridView 保留修改后的数据到数据库

2012-09-06 
DataGridView 保存修改后的数据到数据库DataGridView中有我已经查询到的内容,我想再DataGridView中直接修

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的。代码别写那么复杂

VB.NET code
    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 


[解决办法]
数据库的主键

热点排行