none
VB.net数据库增加列后,如何在DataGridView上显示更改后的数据表? RRS feed

  • 问题

  • 我用数据源适配器手动添加的数据源Access数据库,然后与DataGridView绑定,对数据表进行增加列操作,数据表结构发生改变,怎么把改变后的数据表更新到DataGridView中呢?我的代码如下:
     
        Dim strconn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & System.Windows.Forms.Application.StartupPath & "\数据库.mdb;"
        Dim con As New OleDb.OleDbConnection(strconn)
        con.Open()
        Dim cmd As New OleDb.OleDbCommand("alter table " & "化学 add 备注 String", con)
        cmd.ExecuteNonQuery()
        con.Close()
        Dim sql As String
        sql = "select * from 化学" '更新查询
        Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, con)
        da.Fill(数据库DataSet, "化学")
        化学指标TableAdapter.Update(数据库DataSet)
        DataGridView1.DataSource = 数据库DataSet.Tables(0)   
        DataGridView1.Refresh()
    这样肯定是不行的,虽然Access表结构变了,但是dataGridView没变,我知道手动该怎么改变,就是删除数据库这个数据源,然后重新添加数据源,但是这样是不是太麻烦了,如果这样做的话,用编程该怎么实现呢?菜鸟不懂,希望得到各位高手的指点,谢谢!

    永远是一只小菜鸟!
    2011年8月18日 12:54

答案

全部回复

  • 我用数据源适配器手动添加的数据源Access数据库,然后与DataGridView绑定,对数据表进行增加列操作,数据表结构发生改变,怎么把改变后的数据表更新到DataGridView中呢?我的代码如下:
     
     Dim strconn As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & System.Windows.Forms.Application.StartupPath & "\数据库.mdb;"
     Dim con As New OleDb.OleDbConnection(strconn)
     con.Open()
     Dim cmd As New OleDb.OleDbCommand("alter table " & "化学 add 备注 String", con)
     cmd.ExecuteNonQuery()
     con.Close()
     Dim sql As String
     sql = "select * from 化学" '更新查询
     Dim da As OleDb.OleDbDataAdapter = New OleDb.OleDbDataAdapter(sql, con)
     da.Fill(数据库DataSet, "化学")
     化学指标TableAdapter.Update(数据库DataSet)
     DataGridView1.DataSource = 数据库DataSet.Tables(0) 
     DataGridView1.Refresh()
    这样肯定是不行的,虽然Access表结构变了,但是dataGridView没变,我知道手动该怎么改变,就是删除数据库这个数据源,然后重新添加数据源,但是这样是不是太麻烦了,如果这样做的话,用编程该怎么实现呢?菜鸟不懂,希望得到各位高手的指点,谢谢!

    永远是一只小菜鸟!


    因为你的数据表结构发生变化,所以对程序而言你的数据结构是未知的,不建议使用强类型的已知数据类型数据。

    我的意思:

    1)先用SqlCommand执行ExecuteNonQuery(),改变数据库结构。

    2)然后使用SelectDataAdapter+SqlCommandBuilder就自动生成增删改语句:

    Using adapter As New SqlDataAdapter("select * from xxx", New SqlConnection("xxxx"))
    	Dim sbu As New SqlCommandBuilder(adapter)
    	Dim dt As New DataTable()
    	dataGridView1.DataSource = Nothing
    	dataGridView1.DataSource = dt
    End Using
    

    如果你有其它意见或私下交流,请直接发送maledong_work@foxmail.com;或者讨论(Talk)
    If you do not have QQ, please open the page and download it and click the image to talk or leave message for me.
    下载MSDN桌面工具(Vista,Win7)
    下载Technet桌面小工具(Vista,Win7)
    慈善点击,点击此处
    2011年8月19日 5:19
    版主
  • datagridview1.autogeneratecolumn=true


    http://feiyun0112.cnblogs.com/
    • 已标记为答案 震哥 2011年8月19日 10:44
    2011年8月19日 10:05
    版主
  • 谢谢二位的回答!
    永远是一只小菜鸟!
    2011年8月19日 10:44
  • 遇到相同问题亲测可用的办法:

    点击显示数据源,

    然后数据源那里列出了所有的表,右击需要修改表,选择使用向导配置源,然后后面自己一步步跟着操作,具体细节自己研究吧。

    2014年6月4日 8:44