實際應用中經常和表格打交道,尤其是數據庫項目開發中。在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、調整表頭佈局。將自定義表頭部分調到列頭上方。
。。。(待續)