neuhawk

博客园 首页 新随笔 联系 订阅 管理
      近用智能客户端来重写原有的asp.net做的系统,由于以前分层封装都不错,所以实现起来很快了。智能客户端的开发效率和体验性,比dhtml好多了。我想在输入业务数据用智能客户端,查询系统用asp.net。

   datagridview确实很强大,可是,没有二维表头、合并单元格、合计行等这些功能,会被客户骂死的。如果用商业控件,一是太贵,二是太慢,三是太复杂。所以就想扩展datagridview试试看了。反编译datagridview,三万多行,对于没有winform基础的我,看懂是很痛苦的事情。

1,二维表头,其实很简单,定义一些类来描述二维表头的信息,然后添加CellPainting 事件,用drawstring(),drawline就可以了。
2,单元格合并,也是添加CellPainting 事件,重新画单元格,关键是Rectangle是跨几个单元个就可以了
3,表尾合计,一般合计都是在最后一行,而且,拖动滚动条的时候,一直可见。
   1)csdn有人建议用datatable的Rows.Add+Compute来合计,但是无法实现一直在底部可见,而且输入数据的时候也很难处理。
   2)在datagridview CellPainting /RowPostPainting事件往datagridview 底部画线,画值,可是有个严重的问题是,当拖动滚动条的时候会被遮盖住了。
   3)定义一个自定义控件DataGridViewFooter,能根据DataGridView的列和值自动画表格和统计值,然后dataGridView.Controls.Add(footer)就可以了(这种做法不合理,但也没有办法)。可是当拖动滚动条的时候,比较难处理,我现在用DataGridViewFooter.Refesh()来强制刷新,可是闪烁比较严重,主要是不知道自定义控件怎么实现跟着滚动条来托动,继承ScrollableControl也不行。至于别的问题,都不大,比如最后一行会被合计行遮盖,只要把最后一行行高变就可以了

  初步实现效果图


   希望高手指点一下,等完善了,我会把这三个功能做成合在一起,供需者用。,

posted on 2006-10-24 12:00  neuhawk  阅读(28202)  评论(101编辑  收藏  举报