分享这个主题主要是为了使用C12019版之前的伙伴。因为我的版本是2018版的。2019版,可能一般都不用这个组件了,因为2019开始,FlexGrid越来越强大,加入了Footer等功能,几乎可以实现C1TrueDBGrid所有的东西了,不管是分层还是什么。 另外,FlexGrid没有这个问题,如果列类型是数值型,直接就输不上。Spread也没有这问题。
很多人用C1TrueDBGrid,我觉得可能大部分都是做单据表单用,有合计栏也方便。当然,我曾经自己封装过VS自带的DataGridView,也弄了合计栏和滚动条,后来直接用C1TrueDBGrid,必竟有些功能,它比较省事,也强于VS的DataGridView。
但C1TrueDBGrid后来确实几乎不研发升级了。
回到主题:
当C1TrueDBGrid绑定到DataTable时或不绑定,如果其中某列的类型是int或Double这种数值型的列,运行时,你输入字母等非数值,切换单元格,提交更新,你会发现:
【1】、默认情况下,会跳出一个标题为C1TrueDBGrid的MessageBox提示:输入字符串的格式不正确。
【2】、如果你不想用系统默认的提示,你可以在C1TrueDBGrid的Error事件中,进行处理。这时,就替换了上面【1】的默认提示。
//以上很简单,伙伴们肯定都发现了,也知道怎么处理。
特殊情况如下:
在我的开发环境中,突然不执行上面这两种情况的提示了,我找了好久原因,新做Demo竟也没问题,后来终于查出原因,总结如下:
1、一般我在在VS中,是希望能把一些常规异常都能考虑到并避免,所以,我把异常设置中System.ArgumentException开了,当出现时,中断执行。
2、如果你也像我一样开了中断执行,你也会出现这情况。
3、如果你继续点击运行,两次或几次,你会发现,系统跳出了标题为C1TrueDBGrid的MessageBox提示,也就是执行【1】,【2】那两种情况。
基于此,总结为:
1、C1TrueDBGrid的Error事件或默认的错误处理,其实是在偿试提交单元格更新之后发生的。
注:我能发现,是因为我发现System.ArgumentException这个错误中断执行时,是位于System.Data.dll中。
2、如果你像我一样,习惯开开System.ArgumentException中断,那么我建议在BeforeColUpdate事件中处理,判断列类型和值,然后,e.Cancel=true; 这样不影响你打开异常设置来开发。
我啰嗦了半天,不对的地方,请指正。只是分享下经验。
我的习惯是,自己再封装C1TrueDBGrid。虽然C1TrueDBGrid有很多地方不更新了,但还是有办法处理的,封装好,以后调用,也很方便。
没办法,2018版,我只能用这种心情用了,呵呵。
|