刷新窗体上的数据 [英] Refreshing data on the windows form
问题描述
我的项目结束时,我有一个小问题,我可以在我的数据库(ACCESS 2003)中保存,更新和删除数据,但结果是更新, SAVED或DELETED数据不显示,直到我关闭表格并再次加载,当我保存或更新的数据显示或删除的数据消失时,这是最后一关,我必须完成
我尝试了ds.acceptchanges()但它似乎没有做到这一点
这里是我的代码
Private Sub Form1_Load(ByVal sender As System.Object,ByVal e As System.EventArgs)Handles MyBase.Load
Me.CONTACTSTableAdapter.Fill(Me.PEOPLEDataSet.CONTACTS)
connect()
da =新OleDb.OleDbDataAdapter(sql,con)
da.Fill(ds,PEOPLE)
Showitems()
ds.AcceptChanges()
Maxrows = ds.Tables(PEOPLE)。Rows.Count
inc = - 1
End Sub
Private Sub Showitems()
Dim ds作为新数据集
Dim dt As New DataTable
Dim cmd As New OleDb。 OleDbCommand(sql,con)
Dim da As New OleDbDataAdapter
Dim ms As New System.IO.MemoryStream
ds.Tables.Add( dt)
da =新OleDbDataAdapter(SELECT * FROM CONTACTS,con)
da.Fill(dt)
txtAgentNumber.Text = dt.Rows(0).Item(1)
txtFirstName.Text = dt.Rows (0).Item(2)
txtMiddleName.Text = dt.Rows(0).Item(3)
txtSurName.Text = dt.Rows(0)。项目(4)
cboGender.Text = dt.Rows(0).Item(5)
txtAddress.Text = dt.Rows(0).Item(6)
txtPhone.Text = dt.Rows(0).Item(7)
txtEmail.Text = dt.Rows(0).Item(8)
txtNotes.Text = dt.Rows(0).Item(9)
'picPhoto.Image = dt.Rows(0).Item(10)
ds.AcceptChanges()
con.Close()
End Sub
私有 Sub btnSave_Click( ByVal sender As System。 Object , ByVal e As System.EventArgs)句柄 btnSave.Click
如果 inc<> -1 然后
Dim cmd As 新 OleDb.OleDbCommand(sql,con)
Dim 数据 As Byte ()= File.ReadAllBytes(OpenFileDialog1.FileName)
con.Open()
sql = 插入联系人(AGENTNUMBER,FIRSTNAME,MIDDLENAME,SURNAME,GENDER,EMAIL,PHONE,ADDRESS,NOTES,PICTURE)
sql = sql& VALUES(@ AGENTNUMBER,@ FIRSTNAME,@ MIDDLENAME,@ SURNAME,@ GENDER,@ EMAIL,@ PHONE,@ ADDRESS ,@ NOTES,@ PICTURE)
cmd.CommandText = sql
cmd.Connection = con
cmd.Parameters.AddWithValue( @ AGENTNUMBER,txtAgentNumber.Text)
cmd.Parameters.AddWithValue( @ FIRSTNAME,txtFirstName.Text)
cmd.Parameters.AddWithValue( < span class =code-string> @ MIDDLENAME,txtMiddleName.Text)
cmd.Parameters.AddWithValue( @ SURNAME,txtSurName.Text)
cmd.Parameters.AddWithValue( @ GENDER,cboGender.Text)
cmd.Parameters.AddWithValue( @ EMAIL,txtEmail.Text)
cmd.Parameters.AddWithValue( @ PHONE,txtPhone.Text)
cmd.Parameters.AddWithValue( @ ADDRESS,txtAddress.Text)
cmd.Parameters.AddWithValue( @ NOTES,txtNotes.Text)
cmd.Parameters.AddWithValue( @ PICTURE,data)
cmd.ExecuteNonQuery()
cmd.Dispose()
MsgBox( NEW RECORD ADDED)
ds.AcceptChanges()
btnSave.Enabled = 错误
btnAdd.Enabled = True
btnEdit.Enabled = True
btnDelete.Enabled = True
结束 如果
结束 Sub
私有 Sub btnEdit_Click( ByVal sender As System。 Object ,< span class =code-keyword> ByVal e As System.EventArgs)句柄 btnEdit 。点击
Dim cb 作为 新 OleDb.OleDbCommandBuilder(da)
如果 inc<> -1 然后
ds.Tables( PEOPLE)。Rows(inc).Item( 1 )= txtAgentNumber.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 2 )= txtFirstName.Text
ds.Tables( PEOPLE)。Rows(inc).Item ( 3 )= txtMiddleName.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 4 )= txtSurName.Text
ds.Tables( PEOPLE)。行(inc).Item( 5 )= cboGender.Text
ds.Tables( PEOPLE ).Rows(inc).Item( 6 )= txtAddress.Text
ds.Tables( PEOPLE)。行(inc).Item( 7 )= txtPhone.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 8 )= txtEmail.Text
ds.Tables( PEOPLE )。行(inc).Item( 9 )= txtNotes.Text
Dim ms 作为 新 MemoryStream()
picPhoto.Image.Save(ms,System。 Drawing.Imaging.ImageFormat.Bmp)
ds.Tables( PEOPLE)。行(inc).Item( 10 )= ms.ToArray()
da.Update(ds,< span class =code-string> PEOPLE)
MsgBox( 数据编辑)
ds.AcceptChanges()
结束 如果
私有 Sub btnDelete_Click(< span class =code-keyword> ByVal sender As System。 Object , ByVal e As System.EventArgs) Handles btnDelete。点击
Dim con 作为 新 OleDbConnection
Dim cmd 作为 新 OleDbCommand
Dim ms As 新 MemoryStream
< span class =code-keyword> Dim bm As Bitmap = 新位图(picPhoto) .Image)
bm.Save(ms,picPhoto.Image.RawFormat)
con.ConnectionString = Provider = Microsoft.Jet.OLEDB.4.0; Data Source = | DataDirectory | \PEOPLE.mdb
con.Open()
使用 msS 作为 MemoryStream = 新 MemoryStream()
Dim bmM As 位图= 新位图(picPhoto.Image)
bm.Save(ms,picPhoto.Image.RawFormat)
Dim arrPic()作为 字节 = ms.GetBuffer()
sql = 从代理商处删除AGENTNUMBER ='& txtAgentNumber.Text& '
cmd.CommandText = sql
cmd.Connection = con
cmd.ExecuteNonQuery()
如果 MessageBox.Show( 你真的想删除这条记录吗?, 删除,MessageBoxButtons.YesNo,MessageBoxIcon.Warning)= DialogResult.No 然后
MsgBox( 操作已取消)
退出 Sub
结束 如果
con.Close()
结束 使用
结束 Sub
私有 Sub NavigateRecords()
Dim da As 新 OleDb.OleDbDataAdapter( SELECT * FROM CONTACTS ,con)
Dim dt As New DataTable
da.Fill(dt)
如果 ds.Tables( PEOPLE)。Rows.Count> 0 然后
txtAgentNumber.Text = ds.Tables( PEOPLE)。行(inc).Item( 1 )
txtFirstName.Text = ds.Tables( PEOPLE)。Rows(inc).Item( 2 )
txtMiddleName.Text = ds.Tables( PEOPLE)。Rows(inc).Item( 3 )
txtSurName.Text = ds.Tables( PEOPLE)。行(inc).Item( 4 )
cboGender.Text = ds.Tables( PEOPLE)。Rows(inc ).Item( 5 )
txtAddress.Text = ds.Tables( PEOPLE)。Rows(inc).Item( 6 )
txtPhone.Text = ds.Tables( PEOPLE)。Rows(inc).Item ( 7 )
txtEmail.Text = ds.Tables( PEOPLE)。Rows(inc).Item( 8 )
txtNotes.Text = ds.Tables( PEOPLE)。行(inc).Item( 9 )
Dim bytes As [ Byte ]()= ds.Tables( PEOPLE)。行(inc)。项目( 10 )
Dim ms As 新 MemoryStream(字节)
picPhoto.Image = Image.FromStream(ms)
ds.AcceptChanges()
结束 如果
结束 Sub
注意所有这些代码工作
因为你不使用一个带绑定的后端类,最简单的方法:
使用form1_Load中的所有代码创建一个子。
调用来自form1_load的这个子。
在更新,添加或删除数据后调用此子。
这样你基本上完全重新加载你的数据编辑。
不是最漂亮的方式,但它会起作用。
私有 Sub Form1_Load( ByVal 小号pan> sender As System。 Object , ByVal e As System.EventArgs)句柄 MyBase .Load
Showitems()
End Sub
私有 Sub Showitems()
我 .CONTACTSTableAdapter.Fill( Me .PEOPLEDataSet.CONTACTS)
connect()
da = 新 OleDb.OleDbDataAdapter(Sql,con)
da.Fill(ds, PEOPLE)
Showitems()
ds.AcceptChanges()
Maxrows = ds.Tables( PEOPLE)。Rows.Count
inc = -1
Dim ds 作为 新 DataSet
Dim dt 作为 新 DataTable
Dim cmd As 新 OleDb.OleDbCommand(Sql,con)
Dim da As 新 OleDbDataAdapter
Dim ms As 新 System.IO.MemoryStream
ds.Tables.Add(dt)
da = 新 OleDbDataAdapter( SELECT * FROM CONTACTS,con)
da.Fill(dt)
txtAgentNumber.Text = dt.Rows( 0 )。项目( 1 )
txtFirstName.Text = dt.Rows( 0 )。项目( 2 )
txtMiddleName.Text = dt.Rows( 0 )。项目( 3 )
txtSurName.Text = dt.Rows( 0 )。项目( 4 )
cboGender.Text = dt.Rows( 0 )。项目( 5 )
txtAddress.Text = dt.Rows( 0 )。项目( 6 )
txtPhone.Text = dt.Rows( 0 )。项目(< span class =code-digit> 7 )
txtEmail.Text = dt.Rows( 0 )。Item( 8 )
txtNotes.Text = dt.Rows( 0 )。Item( 9 )
' picPhoto.Image = dt.Rows(0).Item(10)
ds.AcceptChanges()
con.Close()
结束 Sub
私人 Sub btnEdit_Click( ByVal sender As System。 Object ,< span class =code-keyword> ByVal e As System.EventArgs)句柄 btnEdit 。点击
Dim cb 作为 新 OleDb.OleDbCommandBuilder(da)
如果 inc<> -1 然后
ds.Tables( PEOPLE)。Rows(inc).Item( 1 )= txtAgentNumber.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 2 )= txtFirstName.Text
ds.Tables( PEOPLE)。Rows(inc).Item ( 3 )= txtMiddleName.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 4 )= txtSurName.Text
ds.Tables( PEOPLE)。行(inc).Item( 5 )= cboGender.Text
ds.Tables( PEOPLE ).Rows(inc).Item( 6 )= txtAddress.Text
ds.Tables( PEOPLE)。行(inc).Item( 7 )= txtPhone.Text
ds.Tables( PEOPLE)。Rows(inc).Item( 8 )= txtEmail.Text
ds.Tables( PEOPLE )。行(inc).Item( 9 )= txtNotes.Text
Dim ms 作为 新 MemoryStream()
picPhoto.Image.Save(ms,System。 Drawing.Imaging.ImageFormat.Bmp)
ds.Tables( PEOPLE)。行(inc).Item( 10 )= ms.ToArray()
da.Update(ds,< span class =code-string> PEOPLE)
MsgBox( 数据编辑)
ds.AcceptChanges()
结束 如果
Showitems()
结束 Sub 跨度>
hi there iam at the end of my project,but i have a tiny little problem here, i can be able SAVE,UPDATE and DELETE data in my database(ACCESS 2003)they work, but the results that is the UPDATED,SAVED OR DELETED data doesn't show until i close the form and load it again that's when the data that i saved or update shows or the data deleted disappears this is the last hurdle,i have to completing
I tried ds.acceptchanges() but it doesn't seem to do the trick
here are my codes
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.CONTACTSTableAdapter.Fill(Me.PEOPLEDataSet.CONTACTS)
connect()
da = New OleDb.OleDbDataAdapter(sql, con)
da.Fill(ds, "PEOPLE")
Showitems()
ds.AcceptChanges()
Maxrows = ds.Tables("PEOPLE").Rows.Count
inc = -1
End Sub
Private Sub Showitems()
Dim ds As New DataSet
Dim dt As New DataTable
Dim cmd As New OleDb.OleDbCommand(sql, con)
Dim da As New OleDbDataAdapter
Dim ms As New System.IO.MemoryStream
ds.Tables.Add(dt)
da = New OleDbDataAdapter("SELECT*FROM CONTACTS", con)
da.Fill(dt)
txtAgentNumber.Text = dt.Rows(0).Item(1)
txtFirstName.Text = dt.Rows(0).Item(2)
txtMiddleName.Text = dt.Rows(0).Item(3)
txtSurName.Text = dt.Rows(0).Item(4)
cboGender.Text = dt.Rows(0).Item(5)
txtAddress.Text = dt.Rows(0).Item(6)
txtPhone.Text = dt.Rows(0).Item(7)
txtEmail.Text = dt.Rows(0).Item(8)
txtNotes.Text = dt.Rows(0).Item(9)
'picPhoto.Image = dt.Rows(0).Item(10)
ds.AcceptChanges()
con.Close()
End Sub
Private Sub btnSave_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSave.Click
If inc <> -1 Then
Dim cmd As New OleDb.OleDbCommand(sql, con)
Dim data As Byte() = File.ReadAllBytes(OpenFileDialog1.FileName)
con.Open()
sql = "INSERT INTO CONTACTS(AGENTNUMBER,FIRSTNAME,MIDDLENAME,SURNAME,GENDER,EMAIL,PHONE,ADDRESS,NOTES,PICTURE)"
sql = sql & "VALUES(@AGENTNUMBER,@FIRSTNAME,@MIDDLENAME,@SURNAME,@GENDER,@EMAIL,@PHONE,@ADDRESS,@NOTES,@PICTURE)"
cmd.CommandText = sql
cmd.Connection = con
cmd.Parameters.AddWithValue("@AGENTNUMBER", txtAgentNumber.Text)
cmd.Parameters.AddWithValue("@FIRSTNAME", txtFirstName.Text)
cmd.Parameters.AddWithValue("@MIDDLENAME", txtMiddleName.Text)
cmd.Parameters.AddWithValue("@SURNAME", txtSurName.Text)
cmd.Parameters.AddWithValue("@GENDER", cboGender.Text)
cmd.Parameters.AddWithValue("@EMAIL", txtEmail.Text)
cmd.Parameters.AddWithValue("@PHONE", txtPhone.Text)
cmd.Parameters.AddWithValue("@ADDRESS", txtAddress.Text)
cmd.Parameters.AddWithValue("@NOTES", txtNotes.Text)
cmd.Parameters.AddWithValue("@PICTURE", data)
cmd.ExecuteNonQuery()
cmd.Dispose()
MsgBox("NEW RECORD ADDED")
ds.AcceptChanges()
btnSave.Enabled = False
btnAdd.Enabled = True
btnEdit.Enabled = True
btnDelete.Enabled = True
End If
End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click
Dim cb As New OleDb.OleDbCommandBuilder(da)
If inc <> -1 Then
ds.Tables("PEOPLE").Rows(inc).Item(1) = txtAgentNumber.Text
ds.Tables("PEOPLE").Rows(inc).Item(2) = txtFirstName.Text
ds.Tables("PEOPLE").Rows(inc).Item(3) = txtMiddleName.Text
ds.Tables("PEOPLE").Rows(inc).Item(4) = txtSurName.Text
ds.Tables("PEOPLE").Rows(inc).Item(5) = cboGender.Text
ds.Tables("PEOPLE").Rows(inc).Item(6) = txtAddress.Text
ds.Tables("PEOPLE").Rows(inc).Item(7) = txtPhone.Text
ds.Tables("PEOPLE").Rows(inc).Item(8) = txtEmail.Text
ds.Tables("PEOPLE").Rows(inc).Item(9) = txtNotes.Text
Dim ms As New MemoryStream()
picPhoto.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp)
ds.Tables("PEOPLE").Rows(inc).Item(10) = ms.ToArray()
da.Update(ds, "PEOPLE")
MsgBox("DATA EDITED")
ds.AcceptChanges()
End If
Private Sub btnDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnDelete.Click
Dim con As New OleDbConnection
Dim cmd As New OleDbCommand
Dim ms As New MemoryStream
Dim bm As Bitmap = New Bitmap(picPhoto.Image)
bm.Save(ms, picPhoto.Image.RawFormat)
con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\PEOPLE.mdb"
con.Open()
Using msS As MemoryStream = New MemoryStream()
Dim bmM As Bitmap = New Bitmap(picPhoto.Image)
bm.Save(ms, picPhoto.Image.RawFormat)
Dim arrPic() As Byte = ms.GetBuffer()
sql = "DELETE FROM CONTACTS WHERE AGENTNUMBER='" & txtAgentNumber.Text & "'"
cmd.CommandText = sql
cmd.Connection = con
cmd.ExecuteNonQuery()
If MessageBox.Show("Do you really want to Delete this Record?", "Delete", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = DialogResult.No Then
MsgBox("Operation Cancelled")
Exit Sub
End If
con.Close()
End Using
End Sub
Private Sub NavigateRecords()
Dim da As New OleDb.OleDbDataAdapter("SELECT*FROM CONTACTS", con)
Dim dt As New DataTable
da.Fill(dt)
If ds.Tables("PEOPLE").Rows.Count > 0 Then
txtAgentNumber.Text = ds.Tables("PEOPLE").Rows(inc).Item(1)
txtFirstName.Text = ds.Tables("PEOPLE").Rows(inc).Item(2)
txtMiddleName.Text = ds.Tables("PEOPLE").Rows(inc).Item(3)
txtSurName.Text = ds.Tables("PEOPLE").Rows(inc).Item(4)
cboGender.Text = ds.Tables("PEOPLE").Rows(inc).Item(5)
txtAddress.Text = ds.Tables("PEOPLE").Rows(inc).Item(6)
txtPhone.Text = ds.Tables("PEOPLE").Rows(inc).Item(7)
txtEmail.Text = ds.Tables("PEOPLE").Rows(inc).Item(8)
txtNotes.Text = ds.Tables("PEOPLE").Rows(inc).Item(9)
Dim bytes As [Byte]() = ds.Tables("PEOPLE").Rows(inc).Item(10)
Dim ms As New MemoryStream(bytes)
picPhoto.Image = Image.FromStream(ms)
ds.AcceptChanges()
End If
End Sub
note all this code work
as you don't use a back-end class with bindings, the simpelest way to do this:
create a sub with all your code from form1_Load.
call this sub from form1_load.
call this sub after updating, adding or deleting data.
this way you basically completely reload your data after each edit.
not the most pretty way to do this but it will work.
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load Showitems() End Sub Private Sub Showitems() Me.CONTACTSTableAdapter.Fill(Me.PEOPLEDataSet.CONTACTS) connect() da = New OleDb.OleDbDataAdapter(Sql, con) da.Fill(ds, "PEOPLE") Showitems() ds.AcceptChanges() Maxrows = ds.Tables("PEOPLE").Rows.Count inc = -1 Dim ds As New DataSet Dim dt As New DataTable Dim cmd As New OleDb.OleDbCommand(Sql, con) Dim da As New OleDbDataAdapter Dim ms As New System.IO.MemoryStream ds.Tables.Add(dt) da = New OleDbDataAdapter("SELECT*FROM CONTACTS", con) da.Fill(dt) txtAgentNumber.Text = dt.Rows(0).Item(1) txtFirstName.Text = dt.Rows(0).Item(2) txtMiddleName.Text = dt.Rows(0).Item(3) txtSurName.Text = dt.Rows(0).Item(4) cboGender.Text = dt.Rows(0).Item(5) txtAddress.Text = dt.Rows(0).Item(6) txtPhone.Text = dt.Rows(0).Item(7) txtEmail.Text = dt.Rows(0).Item(8) txtNotes.Text = dt.Rows(0).Item(9) 'picPhoto.Image = dt.Rows(0).Item(10) ds.AcceptChanges() con.Close() End Sub
Private Sub btnEdit_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnEdit.Click Dim cb As New OleDb.OleDbCommandBuilder(da) If inc <> -1 Then ds.Tables("PEOPLE").Rows(inc).Item(1) = txtAgentNumber.Text ds.Tables("PEOPLE").Rows(inc).Item(2) = txtFirstName.Text ds.Tables("PEOPLE").Rows(inc).Item(3) = txtMiddleName.Text ds.Tables("PEOPLE").Rows(inc).Item(4) = txtSurName.Text ds.Tables("PEOPLE").Rows(inc).Item(5) = cboGender.Text ds.Tables("PEOPLE").Rows(inc).Item(6) = txtAddress.Text ds.Tables("PEOPLE").Rows(inc).Item(7) = txtPhone.Text ds.Tables("PEOPLE").Rows(inc).Item(8) = txtEmail.Text ds.Tables("PEOPLE").Rows(inc).Item(9) = txtNotes.Text Dim ms As New MemoryStream() picPhoto.Image.Save(ms, System.Drawing.Imaging.ImageFormat.Bmp) ds.Tables("PEOPLE").Rows(inc).Item(10) = ms.ToArray() da.Update(ds, "PEOPLE") MsgBox("DATA EDITED") ds.AcceptChanges() End If Showitems() End Sub
这篇关于刷新窗体上的数据的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!