问一个datagridview代码绑定的刷新问题
我的程序里有一个datagridview控件,通过以下代码绑定到数据库的表table1 ,按button2以后datagridview显示数据,同时要求满足用户在datagridview中进行修改/删除等操作的以后按button1数据库里相应信息能刷新,再按button2能显示修改过的数据.
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim strsql As String
strsql = " select name2 from table1 where id= '" & TextBox1.Text & "'and name1= '" & TextBox2.Text & "' "
Dim myDa1 As SqlDataAdapter = New SqlDataAdapter(strsql, myConn)
Dim ds1 As New DataSet
myDa1.Fill(ds1, "result")
DataGridView1.DataSource = ds1.Tables("result")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
myDa1.Update(ds1.Tables("result"))
ds1.AcceptChanges()
End Sub
报错提示myda1 和ds1 没有定义,请问button1_click的代码如何写才能完成需求?谢谢!
[解决办法]
将ds1和myDa1声明从Button2_Click中移出,成为类的私有成员。
在Button1_Click中调用
myDa1.Update(ds1),不需要调用AcceptChanges,因为Update已调用过。
代码改成如下所示:
Dim myDa1 As SqlDataAdapter Dim ds1 As DataSet Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Dim strsql As String strsql = " select name2 from table1 where id= '" & TextBox1.Text & "'and name1= '" & TextBox2.Text & "' " myDa1= New SqlDataAdapter(strsql, myConn) ds1 = New DataSet() Dim builder As SqlCommandBuilder = _ New SqlCommandBuilder(myDa1) myDa1.Fill(ds1, "result") DataGridView1.DataSource = ds1.Tables("result") End Sub Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click myDa1.Update(ds1) End Sub
[解决办法]
Public Class Form1
Dim SqTex As String = "Data Source=.\SQLEXPRESS;AttachDbFilename=E:\temp\Tsq.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"
Dim myConn As New SqlClient.SqlConnection(SqTex)
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'条件查询
Dim strsql As String
strsql = "SELECT * from 数据表 where ID= '" & TextBox1.Text & "'AND 名称= '" & TextBox2.Text & "'"
Dim myDa1 As SqlClient.SqlDataAdapter = New SqlClient.SqlDataAdapter(strsql, myConn)
Dim ds1 As New DataSet
myDa1.Fill(ds1, "数据表")
DataGridView1.DataSource = ds1
DataGridView1.DataMember = "数据表"
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
' 更新数据到数据库
Dim ds1 As DataSet = DataGridView1.DataSource
Dim Ad As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM 数据表", myConn)
Dim SqlBuild As New SqlClient.SqlCommandBuilder(Ad)
'--------先括条件表中须有主键--------------否则出错!-----
Ad.DeleteCommand = SqlBuild.GetDeleteCommand
Ad.InsertCommand = SqlBuild.GetInsertCommand
Ad.UpdateCommand = SqlBuild.GetUpdateCommand
Ad.Update(ds1, "数据表")
End Sub
Private Sub Form1_FormClosed(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
myConn.Close()
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
myConn.Open()
Call SqlFill()
End Sub
Private Sub SqlFill()
Dim Ad As New System.Data.SqlClient.SqlDataAdapter("SELECT * FROM 数据表", myConn)
Dim ds1 As New DataSet
Ad.Fill(ds1, "数据表")
DataGridView1.DataSource = ds1
DataGridView1.DataMember = "数据表"
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'条件删除
Dim strsql As String
strsql = "DELETE FROM 数据表 where ID= '" & TextBox1.Text & "'AND 名称= '" & TextBox2.Text & "'"
'获取行号
' Dim Pot As Point = DataGridView1.CurrentCellAddress
'--------------------------------------------
' DataGridView1.Rows.RemoveAt(Pot.Y)
'------------------------------------------------
Dim delComm As New SqlClient.SqlCommand(strsql, myConn)
delComm.ExecuteNonQuery()
Call SqlFill()
End Sub
End Class