有關網格(Grid)控件的一些想法

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

 

。。。(待續)

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章