有关网格(Grid)控件的一些想法

来源:互联网 发布:什么是矩阵单位化 编辑:程序博客网 时间:2024/04/28 00:44

实际应用中经常和表格打交道,尤其是数据库项目开发中。在VB6中,使用过VSFlexGrid,那绝对是一个好东西,数据方面:支持数据库绑定和虚模式;外观上:支持行列隐藏、滚动条隐藏、行列冻结、合并单元格等。

现在有个想法,就是能否有一个实现报表式的控件,并能支持虚模式及绑定数据库,这里所谓的报表式,是指网格控件不是单一的二维数据表可视化,而是有一些报表功能,如有表头和表足(或者叫顶部固定行、底部固定行,可多行,能单元格合并),表头(或列头)、表足往往蕴含丰富信息,如分组列头,表足显示单元格汇聚信息等。

一、在VB6下考虑过用几个网格合并做一个自定义的控件,似乎可以,但外观上有些别扭。因MS把VB甩在半路上,只好转到MFC。

二、在MFC下,修改Chris Maunder MFC Grid control 似乎也可以,但工作量很大,目前实现了表头、表足,单元格合并(参考Huang Wei代码),行列冻结,改进GridCellCheck和GridCellCombo单元格类型。表头表足工作在实模式下,另建立其对应的后台单元格对象数组做维护。但在数据绑定虚模式下遇到问题,没能做下去。

 

 

 

三、修改BCG的BCGPGridCtrl1200,重点是表头表足部分。

 

 

 

 

修正了几个小Bug(本想向BCG报告,但英文差,怕表达不清):

1、当设置了表头或表足,并显示行头时,滚动窗口行头重绘错乱,垂直滚动条与表足交叉部闪烁。

 

......

 pGrid->EnableRowHeader (TRUE);
 pGrid->EnableLineNumbers ();

 // 测试表头足高
 pGrid->SetGridHeaderHeight(20);
 pGrid->SetGridFooterHeight(40);

 ......

 

 (解决方法:修改CBCGPGridCtrl::OnGetRowHeaderRect() 及 CBCGPGridCtrl::OnDraw())

 

2、当设置了冻结列,并设置调整列宽时不显示内容,在调整冻结列下一列的列宽时,该列内容被冻结列遮盖

 

 // 冻结第2列
 pGrid->FreezeColumns (2, FALSE); 

 // 拖动列宽调节时,不显示内容
 pGrid->SetShowDragContext(FALSE);

 

 (解决方法:修改CBCGPGridCtrl::OnLButtonUp())

 

 3、调整表头布局。将自定义表头部分调到列头上方。

 

。。。(待续)

 

 

 

 

 

原创粉丝点击