如何从Visual Basic中的DataGridView更新Access DB

时间:2019-04-20 22:50:52

标签: vb.net visual-studio

我正在创建一个清单应用程序,该应用程序使用Visual Basic在Visual Studio中的Access DB上运行。我可以很好地填充数据网格视图,但是当我尝试向数据网格视图中添加新信息时,它无法正确编号并且不会追加数据库。

我尝试使用表适配器进行绑定和更新。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    CustomersBindingSource.AddNew()

    Me.Validate()
    Me.CustomersTableAdapter.Update(Me.Database1DataSet.Customers)
    Me.CustomersBindingSource.EndEdit()
End Sub

这是我的代码:

Public Class Form1
    Private Sub enterbtn_Click(sender As Object, e As EventArgs) Handles enterbtn.Click
        If username.Text = "Tanner" And password.Text = "bmis365" Then
            GroupBox1.Visible = False
        Else
            MsgBox("Incorrect Username or Password, please try again.")
            username.Clear()
            password.Clear()
            username.Focus()
        End If
    End Sub

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

    DataGridView1.CurrentCell = Nothing

    'This line of code loads data into the 'Database1DataSet.Customers' table. You can move, or remove it, as needed.

    Me.CustomersTableAdapter.Fill(Me.Database1DataSet.Customers)

End Sub

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    'This is where my new info is to be appended into the database, once the button is clicked. 

    CustomersBindingSource.AddNew()

    Me.Validate()
    Me.CustomersTableAdapter.Update(Me.Database1DataSet.Customers)
    Me.CustomersBindingSource.EndEdit()
End Sub


Private Sub searchbtn_Click(sender As Object, e As EventArgs) Handles searchbtn.Click

    'The Following Code is from https://social.msdn.microsoft.com/Forums/vstudio/en-US/36c54726-4f49-4e15-9597-7b201ec13ae7/search-in-datagrid-using-textbox-vbnet-without-data-connectivity?forum=vbgeneral

    For Each row As DataGridViewRow In DataGridView2.Rows
        For Each cell As DataGridViewCell In row.Cells
            If Not IsNothing(cell.Value) Then
                If cell.Value.ToString.StartsWith(searchbar.Text, StringComparison.InvariantCultureIgnoreCase) Then
                    cell.Selected = True
                    DataGridView2.CurrentCell = DataGridView2.SelectedCells(0)

                End If
            End If
        Next
    Next
End Sub
End Class

我的输出最初有3行(分别编号为1、2和3),但是通过应用程序添加的任何行都具有数字-1,-2,-3等。另外,当我关闭程序并重新启动它时,从我在数据库文件中输入原始行(1、2和3)以来,这些行仍然存在,但是通过应用程序添加的所有行都消失了。

1 个答案:

答案 0 :(得分:0)

这是执行更新的一种方法,以及其他一些常见的SQL操作/操作。

Imports System.Data.SqlClient
Public Class Form1
    Dim sCommand As SqlCommand
    Dim sAdapter As SqlDataAdapter
    Dim sBuilder As SqlCommandBuilder
    Dim sDs As DataSet
    Dim sTable As DataTable

    Private Sub load_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles load_btn.Click
        Dim connectionString As String = "Data Source=.;Initial Catalog=pubs;Integrated Security=True"
        Dim sql As String = "SELECT * FROM Stores"
        Dim connection As New SqlConnection(connectionString)
        connection.Open()
        sCommand = New SqlCommand(sql, connection)
        sAdapter = New SqlDataAdapter(sCommand)
        sBuilder = New SqlCommandBuilder(sAdapter)
        sDs = New DataSet()
        sAdapter.Fill(sDs, "Stores")
        sTable = sDs.Tables("Stores")
        connection.Close()
        DataGridView1.DataSource = sDs.Tables("Stores")
        DataGridView1.ReadOnly = True
        save_btn.Enabled = False
        DataGridView1.SelectionMode = DataGridViewSelectionMode.FullRowSelect

    End Sub

    Private Sub new_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles new_btn.Click
        DataGridView1.[ReadOnly] = False
        save_btn.Enabled = True
        new_btn.Enabled = False
        delete_btn.Enabled = False
    End Sub

    Private Sub delete_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles delete_btn.Click
        If MessageBox.Show("Do you want to delete this row ?", "Delete", MessageBoxButtons.YesNo) = DialogResult.Yes Then
            DataGridView1.Rows.RemoveAt(DataGridView1.SelectedRows(0).Index)
            sAdapter.Update(sTable)
        End If
    End Sub

    Private Sub save_btn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles save_btn.Click
        sAdapter.Update(sTable)
        DataGridView1.[ReadOnly] = True
        save_btn.Enabled = False
        new_btn.Enabled = True
        delete_btn.Enabled = True
    End Sub
End Class