【问题标题】:How to Edit Datagrid Records and also in database如何在数据库中编辑 Datagrid 记录
【发布时间】:2016-01-21 06:11:18
【问题描述】:

这是我将数据从数据库加载到数据网格的代码

Private Sub Records_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;"
    Dim MyConn As OleDbConnection
    Dim da As OleDbDataAdapter
    Dim ds As DataSet
    Dim tables As DataTableCollection
    Dim source1 As New BindingSource

    MyConn = New OleDbConnection
    MyConn.ConnectionString = connString
    ds = New DataSet
    tables = ds.Tables
    da = New OleDbDataAdapter("Select * from [userinfo] ORDER BY ID", MyConn)
    da.Fill(ds, "userinfo") 'Change items to your database name
    Dim cb = New OleDbCommandBuilder(da)
    Dim view As New DataView(tables(0))
    source1.DataSource = view
    DataGridView1.DataSource = view

End Sub


Private Sub btnCreate_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCreate.Click
    If RequiredEntry() = True Then
        Return
    End If
    Try
        Dim cn As New OleDbConnection("Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;")

        If cn.State = ConnectionState.Closed Then cn.Open()

        Dim sSQL As String = "insert into [userinfo]([username],[password],[FirstName],[LastName],[Account]) values(@username,@password,@FirstName,@LastName,@Account)"

        Dim cmd As OleDbCommand = New OleDbCommand(sSQL, cn)


        ' UserName
        If txtPassword.Text = txtConfirm.Text Then
            Dim username As OleDbParameter = New OleDbParameter("@username", OleDbType.VarWChar, 50)
            username.Value = txtUser.Text.ToString()
            cmd.Parameters.Add(username)
        Else
            MsgBox("Password not matched")

        End If

        'password
        Dim password As OleDbParameter = New OleDbParameter("@password", OleDbType.VarWChar, 50)
        password.Value = txtPassword.Text.ToString()
        cmd.Parameters.Add(password)


        'First Name
        Dim FirstName As OleDbParameter = New OleDbParameter("@FirstName", OleDbType.VarWChar, 50)
        FirstName.Value = txtFirstName.Text.ToString()
        cmd.Parameters.Add(FirstName)


        ' Last Name
        Dim LastName As OleDbParameter = New OleDbParameter("@LastName", OleDbType.VarWChar, 50)
        LastName.Value = txtLastName.Text.ToString()
        cmd.Parameters.Add(LastName)

        'Account

        Dim Account As OleDbParameter = New OleDbParameter("@Account", OleDbType.VarWChar, 50)
        Account.Value = cboAccount.GetItemText(cboAccount.SelectedItem)
        cmd.Parameters.Add(Account)



        If cmd.ExecuteNonQuery() Then
            cn.Close()
            MessageBox.Show("New User is Added successfully.", "Record Saved")
            Call clear()
            Me.Hide()
            FileMaintenance.Show()


        Else
            MsgBox("New User Addition Failed ", MsgBoxStyle.Critical, "Addition Failed")
            Return
        End If

    Catch ex As Exception
        Exit Sub
    End Try
End Sub
Private Sub NewUser_KeyDown(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles Me.KeyDown
    e.SuppressKeyPress = e.Control
    If e.KeyCode = Keys.Enter Then
        SendKeys.Send("{tab}")
    End If

End Sub

这是我的删除

Private Sub cmdDelete_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmdDelete.Click
    Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=" & My.Application.Info.DirectoryPath.ToString() & "\BackUp\Database3.Accdb;"
    Dim MyConn As OleDbConnection
    Dim da As OleDbDataAdapter
    Dim ds As DataSet
    Dim tables As DataTableCollection
    Dim source1 As New BindingSource
    Dim rows As String


    Try
        MyConn = New OleDbConnection
        MyConn.ConnectionString = connString
        ds = New DataSet
        tables = (ds.Tables)
        rows = DataGridView1.SelectedRows(0).Cells(0).Value.ToString()
        da = New OleDbDataAdapter("Delete * from [userinfo] where ID=" & rows, MyConn)
        da.Fill(ds, "userinfo")
        Records_Load(sender, e)

    Catch ex As Exception
        MessageBox.Show("cannot delete empty records")
    End Try

如何在我的数据库中编辑数据网格视图中的数据 还有如何锁定数据网格以防止意外输入字段

【问题讨论】:

    标签: vb.net datagrid


    【解决方案1】:

    您的代码非常错误。您首先正确地检索数据,但随后插入和删除不正确。

    这个想法是您对所有四个操作使用一个数据适配器,即选择、插入、更新和删除。这就是为什么它具有SelectCommandInsertCommandUpdateCommandDeleteCommand 属性的原因。您调用Fill,它会执行SelectCommand 中的SQL 以将数据检索到DataTable。然后,您应该对该DataTable 中的数据进行所有您想要的更改,即插入、更新和删除。完成后,在数据适配器上调用Update,它将根据需要执行InsertCommandUpdateCommandDeleteCommand 中的SQL,以将所有更改保存回数据库。这是我很久以前写的一个例子:

    Private connection As New SqlConnection("connection string here")
    Private adapter As New SqlDataAdapter("SELECT ID, Name, Quantity, Unit FROM StockItem", _
                                          connection)
    Private table As New DataTable
    
    Private Sub InitialiseDataAdapter()
        Dim delete As New SqlCommand("DELETE FROM StockItem WHERE ID = @ID", Me.connection)
        Dim insert As New SqlCommand("INSERT INTO StockItem (Name, Quantity, Unit) VALUES (@Name, @Quantity, @Unit)", Me.connection)
        Dim update As New SqlCommand("UPDATE StockItem SET Name = @Name, Quantity = @Quantity, Unit = @Unit WHERE ID = @ID", Me.connection)
    
        delete.Parameters.Add("@ID", SqlDbType.Int, 4, "ID")
    
        insert.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name")
        insert.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity")
        insert.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit")
    
        update.Parameters.Add("@Name", SqlDbType.VarChar, 100, "Name")
        update.Parameters.Add("@Quantity", SqlDbType.Float, 8, "Quantity")
        update.Parameters.Add("@Unit", SqlDbType.VarChar, 10, "Unit")
        update.Parameters.Add("@ID", SqlDbType.Int, 4, "ID")
    
        Me.adapter.DeleteCommand = delete
        Me.adapter.InsertCommand = insert
        Me.adapter.UpdateCommand = update
    
        Me.adapter.MissingSchemaAction = MissingSchemaAction.AddWithKey
    End Sub
    
    Private Sub GetData()
        'Retrieve the data.
        Me.adapter.Fill(Me.table)
    
        'The table can be used here to display and edit the data.
        'That will most likely involve data-binding but that is not a data access issue.
    End Sub
    
    Private Sub SaveData()
        'Save the changes.
        Me.adapter.Update(Me.table)
    End Sub
    

    请注意,此示例是为 SQL Server 编写的,但您只需将所有 SqlClient 类型替换为 OleDb 类型,它适用于 Access。

    如果您出于某种原因想立即保存更改,那么您只需在每次更改后调用Update

    顺便说一句,你的连接字符串应该这样写:

    Dim connString As String = "Provider=Microsoft.Ace.Oledb.12.0; Data Source=|DataDirectory|\BackUp\Database3.Accdb;"
    

    【讨论】:

    • 对不起,我混合了 sql 和 oledb 教程。将使用您的代码并将其更改为 oledb。谢谢你,如果我有问题会在这里再次评论。再次感谢
    猜你喜欢
    • 1970-01-01
    • 2021-08-06
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    相关资源
    最近更新 更多