C# 修正DataGrid bug引起的问题及反思

       背景:有个项目是用C# 2005写的客户端,其中用到了表格控件,该控件继承自C#标准的DataGridView,其主要功能有:方便的读取增、删、改记录,绑定list到表格,记录自动映射成订单行项目、物料等VO对象。另外,为了表格的编辑方便,自定义了多列下拉、日期时间等单元格类型。

问题就出现在使用下拉编辑类型时,不管是标准下拉还是自定义的多列下拉,用户都需要点击很多次下拉,下拉框才能弹出来,用户才可选择下拉框条目。于是,用户提出:表格下拉编辑能否像其它单元格编辑一样,按F2或者鼠标点击即可编辑单元格数据?

 

       解决:

       其实解决表格的单元格下拉编辑用户需要鼠标多次点击才可弹出下拉框供用户选择问题很简单,只要做以下处理即可:

       1)捕捉单元格的鼠标单击事件;

       2)在鼠标单击事件中,判断该列是否为下拉编辑?如果是模拟键盘的F4按钮即可(F4可弹出下拉框)。

       当时,感觉问题挺简单,没有多想就把代码提交到SVN上,并升了表格控件dll的版本,发布出去了。

 

       问题:

       随着控件新版本的发布之后,用户进行表格下拉编辑时,只要鼠标点一下即可弹出下拉框,用户当时也非常高兴。可是,后来用户发现,经常修改完下拉单元格数据之后,进行保存操作时,系统总是提示“数据未发生变动,无需保存!”。可是,用户分明是刚修改完下拉编辑的单元格数据呀,这下子把用户弄傻了,狂骂我们解决完旧问题,又产生新问题。我当时那个无地自容呀。

       后来仔细分析,原因是:

       1)抓取表格变动数据是基于表格的OnCellEndEdit事件的,如果该单元格的值与编辑前的值不一致,则会修改该行状态为更改行;

       2)下拉编辑单元格,模拟键盘的F4按键后,直接点击保存按钮,没有触发OnCellEndEdit事件,导致该行未标记成更改行,从而导致保存操作时会提示“数据未发生变动,无需保存!;

       原因找到了,解决起来也挺简单。但是这个事情对我来说教训还是比较深刻的。扪心自问,开发已经快4年了,对程序bug的解决方案却如此草率,实在是有点说不过去。

 

       总结:

       虽说,没有bug就不是软件,但是优秀的程序、经典的软件其bug处理一定是很完美的,个人认为在bug处理上一定要注意下述几个问题:

       1)深入分析bug产生的原因,不知道原因不要修改代码;

       2)原因清除了之后,没有完美的解决方案之前,千万不要随便修改代码,往往会顾此失彼,修正旧bug,迎来新bug

       3)公用代码的bug不要随便修改,宁可在个别程序上多写代码特殊处理掉;

       4)修改bug之后,一定要进行充分的测试,当然可以进行回归测试是最好的(有点理想),但是对于修正bug之后所产生的副作用一定要进行充分地测试、评估。

       5)当然,进行良好的源码管理是必须的。

你可能感兴趣的:(datagrid,SVN,list,C#,测试,dll)