Datagridview1不包含新的数据库行

时间:2014-02-01 17:51:10

标签: c# datagridview datasource

我正在将一个程序从VS C#2003移植到VS C#2012,并且在2012年遇到了一个我在使用C#2003时没遇到的问题。

为了演示,我创建了一个只有一个datagridview1的简单form1。

private void Form1_Load(object sender, EventArgs e)

//includes only this
this.table1TableAdapter.Fill(this.database1DataSet.Table1);

和datagridview1正确显示数据源中的2个测试行(MS Access dB)

问题是,如果我向MS Access dB添加第3行并再次运行程序, 它仍然只显示原来的2行。

我已经反复搜索了一个解决方案,因此datagridview1将显示新的dB行,从第3行开始,但无法找到它。这不应该是这么难,应该吗?!

此链接似乎有解决方案: how to update rows list of a datagridview after adding new row to a table

但我无法让它发挥作用。

帮助!

感谢。

2 个答案:

答案 0 :(得分:0)

正如你在SE question中所说的那样尝试将dataGridView的DataSource设置为null然后再次绑定它。

我建议您使用void并随时调用它。

添加using System.Data.OleDb

实施例

private void LoadData()
{
string Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:/PathToYourAccessFile";
string SQLstr = "Select * from YourAccessTable";
OleDbConnection Conn = new OleDbConnection(Constr);
Conn.Open();
OleDbDataAdapter ODA;
DataTable DT;
ODA = new OleDbDataAdapter (SQLstr, Conn ); 
DT = new DataTable();
ODA.Fill(DT);
dataGridView1.DataSource = DT ;
Conn.Close();

}

调用类似LoadData();

的方法

这是直接访问Access数据库

的方法
    NorthwindDataSetTableAdapters.RegionTableAdapter regionTableAdapter = 
        new NorthwindDataSetTableAdapters.RegionTableAdapter();

regionTableAdapter.Delete(5, "NorthWestern");

来自MSDN

直接从WinForms直接插入

 string myConnectionString;
        myConnectionString =
                @"Provider=Microsoft.ACE.OLEDB.12.0;" +
                @"Data Source=C:\Users\Public\Database1.accdb;";

        using (var con = new OleDbConnection())
        {
            con.ConnectionString = myConnectionString;
            con.Open();

            using (var cmd = new OleDbCommand())
            {
                cmd.Connection = con;
                cmd.CommandType = System.Data.CommandType.Text;
                cmd.CommandText =
                    @"INSERT INTO YourTable (Column1, Column2) VALUES ('Hello', 'World')";
                cmd.ExecuteNonQuery();
            }
            con.Close();
        }

使用此代码在datagridview

中打开数据库

答案 1 :(得分:0)

通过将LoadData添加到Form1_Load解决了问题,如下所示:

    private void Form1_Load(object sender, EventArgs e)
    {
        this.table1TableAdapter.Fill(this.database1DataSet.Table1);
        LoadData(); 

    }

其中LoadData符合Marek的建议:

    private void LoadData()
    {
        string Constr = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\\Users\\User1\\Documents\\Database1.accdb";
        string SQLstr = "Select * from Table1";
        OleDbConnection Conn = new OleDbConnection(Constr);
        Conn.Open();
        OleDbDataAdapter ODA;
        DataTable DT;
        ODA = new OleDbDataAdapter (SQLstr, Conn ); 
        DT = new DataTable();
        ODA.Fill(DT);
        dataGridView1.DataSource = DT ;
        Conn.Close();

    }