dataGridView 绑定一个表 dataSet1.Tables["temp"] 后,如果再次查询,这时temp 的数据可能是另外一个表的数据,表结构和数据都发生了变化,dataGridView 的显示并未像预想中的跟着变化。
有人说,再次查询重新生成新表,dataGridView绑定新表,不就行了。可是如果多次查询,不就在内存中生成了一堆表吗?
在网上查到:
dataGridView 绑定的对象若是List<>之类的,修改List<>集合中的数据后,DataGridView中的值并不会发生改变,可以重新设置DataSource属性。为什么会这样呢?难道是List<>集合没有事件,DataGridView不能检测到数据源的数据变化?重新设置DataSource属性时,还应注意一个问题,必须要用一个新对象才可以。(可以方便的使用List<>.ToArray()或List<>.CopyTo()),
受此启发,重新写了绑定方法:
private void fillDataview(string sqlstr)
{
if (dataSet1.Tables.IndexOf("temp") >= 0)
{
dataSet1.Tables["temp"].Reset();
}
OLEDBFunc oledb = new OLEDBFunc();
oledb.OpenConn();
OleDbDataAdapter da = new OleDbDataAdapter(sqlstr, oledb.dbConn);
da.Fill(dataSet1, "temp");
oledb.closeConn();
DataTable viewTable=dataSet1.Tables["temp"].Copy();
dataGridView1.AutoGenerateColumns = true;
dataGridView1.DataSource = viewTable;// dataSet1.Tables["temp"];
}