找回密码
 立即注册

QQ登录

只需一步,快速开始

yin_tb

高级会员

53

主题

199

帖子

1014

积分

高级会员

积分
1014

微信认证勋章

yin_tb
高级会员   /  发表于:2021-5-8 17:28  /   查看:2251  /  回复:4
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放弃了新增的。您试一下。





4 个回复

倒序浏览
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-8 18:28:15
沙发
收到,我周一给你验证一下,另外有一个小建议,我看你问题描述的挺详细的,打字也麻烦。实际可用直接给一个小demo。我这边重现问题也更快一些。
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-5-8 18:38:04
板凳
我这种从DOS时代来的,用五笔,打字快。很多时候,我和客户沟通,更喜欢用文字,不喜欢说话。原来别的问题我倒是有弄有DEMO,那样你验证起来也快。每次问题不一样,改也麻烦。这样吧,我下次弄个DEMO,每次有问题,我在里面新加个Form,做个全局的datatable调用,那样也快,你验证起来也快。
回复 使用道具 举报
yin_tb
高级会员   /  发表于:2021-5-8 19:57:37
地板
本帖最后由 yin_tb 于 2021-5-8 19:59 编辑

这个问题,等我再测下吧,我在做DEMO时,发现,如果不用SqlDataAdapter,而是直接
用nrow=dt1.newrow();然后赋值加到dt1,可以正常清除。我弄个access数据库试下吧,如果有问题,我就直接发DEMO给你。这时我是Tgrid1.SetDataBinding(dt1,"",false);为了省事。我弄上布局,从access 用SqlDataAdapter加载试下
回复 使用道具 举报
Richard.Ma讲师达人认证 悬赏达人认证 SpreadJS 开发认证
超级版主   /  发表于:2021-5-9 01:00:51
5#
好的,
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 立即注册
返回顶部