刷新窗体上的数据 [英] Refreshing data on the windows form

查看:75
本文介绍了刷新窗体上的数据的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我的项目结束时,我有一个小问题,我可以在我的数据库(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  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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆