【问题标题】:Want to delete DataGridView column with Access database column想要删除带有 Access 数据库列的 DataGridView 列
【发布时间】:2015-07-21 10:48:40
【问题描述】:

我正在使用 VB2010 和 Access2007

我希望能够在 Access 数据库中添加/删除列,并在运行时使用代码在 DataGridView 中显示结果。

我的 VB 表单有一个用于添加的 AddColumn 按钮和一个用于从数据库中删除该列的 DropColumn 按钮,以及一个用于显示结果的 GataGridView1。

AddColumn 将列添加到数据库和 DataGridView。 DropColumn 从数据库中删除列,但不从 DataGridView 中删除。 那是我的问题,如何从 DataGridView1 以及数据库中删除列!

我试图找到解决这个问题的方法是徒劳的,欢迎您提出任何建议。

这是我的 VB 代码

导入 System.Data.OleDb。

公开课Form3

Dim con1 As New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source = I:/AccessDGV/dbAccessDGV.mdb")
Dim da As New OleDbDataAdapter("SELECT * FROM tblContacts", con1)

Dim dt As New DataTable
Dim bs As New BindingSource

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

    Dim conString As String = My.Settings.dbAccessDGVConnectionString
    Dim con1 As New OleDbConnection(conString)
    Dim CB As New OleDbCommandBuilder(da)
    da.Fill(dt)
    bs.DataSource = dt

    DataGridView1.DataSource = bs

End Sub

Private Sub btnAddColumn_Click(sender As System.Object, e As System.EventArgs) Handles btnAddColumn.Click

    con1.Open()
    Dim sqladdcolumn As String = "ALTER TABLE tblContacts ADD COLUMN Extra1 Text"
    Dim cmd As OleDbCommand = New OleDbCommand(sqladdcolumn, con1)

    Try
        cmd.ExecuteNonQuery()
        da.Fill(dt)
        cmd.Dispose()
        con1.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
        con1.Close()
    End Try

End Sub

Private Sub btnDropColumn_Click(sender As System.Object, e As System.EventArgs) Handles btnDropColumn.Click

    con1.Open()
    Dim sqldropcolumn As String = "ALTER TABLE tblContacts DROP COLUMN Extra1 Text"
    Dim cmd As OleDbCommand = New OleDbCommand(sqldropcolumn, con1)

    Try
        cmd.ExecuteNonQuery()
        da.Fill(dt)
        cmd.Dispose()
        con1.Close()
    Catch ex As Exception
        MsgBox(ex.Message)
        con1.Close()
    End Try

End Sub

结束类

【问题讨论】:

    标签: vb.net datagridview


    【解决方案1】:

    您需要将数据源重新绑定到gridview。发生的事情是 gridview 仍然绑定到仍然具有该列的“旧”数据源。

    Private Sub btnDropColumn_Click(sender As System.Object, e As System.EventArgs) Handles btnDropColumn.Click
    
    con1.Open()
    Dim sqldropcolumn As String = "ALTER TABLE tblContacts DROP COLUMN [Extra1 Text]"
    Dim cmd As OleDbCommand = New OleDbCommand(sqldropcolumn, con1)
    
    Try
        cmd.ExecuteNonQuery()
        'clear the datatable.
        dt.clear()
        da.Fill(dt)
        cmd.Dispose()
        con1.Close() 
        ' Rebind the datasource of the gridview.        
        DataGridView1.DataSource = dt
        DataGridView1.Refresh()
    Catch ex As Exception
        MsgBox(ex.Message)
        con1.Close()
    End Try
    
    End Sub
    

    UPDATE 更改了查询字符串。 我认为问题可能出在查询字符串中。它试图删除的列名是 Extra1 而不是 Extra1 Text。

    【讨论】:

    • 感谢卡什的帮助。
    • 你不应该需要它,但尝试添加 DataGridView1.Update();和/或 DataGridView1.refresh();在这一行之后“DataGridView1.DataSource = bs”
    • 编辑了我给出的答案。看看,让我们知道它是否有效。
    • 在执行填充方法之前,您还需要清除数据表。
    • Kash 尝试了您的第二个建议,但仍然无法删除该列
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-09
    • 1970-01-01
    • 2015-11-16
    • 2021-05-07
    • 2016-06-18
    • 1970-01-01
    • 2013-04-28
    相关资源
    最近更新 更多