我正在将一个程序从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
但我无法让它发挥作用。
帮助!
感谢。
答案 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();
}