1金币
不好意思,马老师,又发现个问题。Form1上:
1、一个TrueDBgrid,命名为Tgrid1,
2、一个datatable,命名为dt1,不管dt1有几列了,Form的Load事件里创建列即可。
3、两个按钮,一个是btn_add新增单据,一个是btn_loadvouch加载单据。
4、Form_load事件里:
(1)、创建列......
(2)、Tgrid1.SetDataBinding(dt1,"",true) //绑定并保留布局格式
展现问题的方式是:
1、btn_add的click事件里:
dt1.Rows.Clear();//新增单据前,清除数据。
datarow nrow=dt1.newrow(); //此时,Tgrid1因为是绑定的,自动增加了一行。
2、btn_loadvouch事件里:
dt1.Rows.Clear(); //为了加载历史单据,先清除一下datatable,发现有时不管用,上面1新增的行还在。
//dt1.AcceptChanges; //这个其实没意义,因为没有缓存行状态的概念。
// Tgrid1.Delete(0,Tgrid1.VisibleRows); //因为是绑定的,得这样删,但发现,有时也不行,1新增的行还在。
SqlDataAdapter sda=New SqlDataAdapter("连接字符串",cn);
sda.Fill(dt1); //你会发现,加载的数据确实加载到Tgrid1里了,但1新增的行还在,上面的clear,或者是Tgrid1的Delete有时起作用,有时不行。
//Tgrid1.Rebind(true); //我以为重新绑一下可以,发现也不行。RefetchRow我也试了,能想到的都试了,流汗呀。
//总结,问题就是,在加载数据前,想清除网格已存在的数据,但没有清掉。你也说过,我也试了,TrueDBgrid和datatable之间,确实没有缓存,没有 RowState的概念。这个问题很奇怪:如果在上面的DEMO说明里,再加一个btn_addrow增行按钮,每次增加一行,再加一个btn_back放弃按钮,
就算你增加了5行,这时调用dt1.RejectChanges,反而能清除所有行,因为dt1放弃了新增的。您试一下。
|
|