寫在前面
剛寫這個題目,就覺得肩上重了,不知道自己能否對DataGrid詳解之。希望大家共同指正。DataGrid控件是VC方便地用來顯示數據的一個極好的網格控件,我不否認網上還有期它不少優秀的網格控件,但我總喜歡使用微軟自已的東西 。除非它滿足不了我的需要。不是我太依賴Microsoft,你想想,如果你最常用的開發工具是VC,VC是微軟的主打開發工具,它與Windows系統的兼容性極好,連它的控件也不例外,你為何不先選用成熟的代碼,如果它升級了,你的系統幾乎不作改動就可以繼續為你效勞,有什麼不好,這不完全是那種無謂的依靠,而是利用 。更重要的是你可以更注重你的系統功能,而不是代碼的細節。
之所以要寫這樣的文章,因為有幾個網友在問我網格控件的用法,我想也許其他朋友也有用(如果真的是這樣,我很高興)。
一、我先交待主要內容
在網格控件中顯示查詢的數據結果。
對網格控件的顯示進行控制(如列寬)。
對網格內容格式進行控制(如將小於1的小數顯示成百分數)
二、准備工作
先建立一個工程,我的主框架選用對話框,然後插入你DataGrid控件,見如圖1
圖1
找到Microsoft DataGrid OLEDB 6.0 控件,確定,出現圖所示對話框,這個對話框中你要根據需要選擇的類,這些類封裝了這個控件的幾乎所有功能有方法。這裡我只選擇了三個類:CDataGrid,CColumns,CColumn,如圖2(我們知道,ActiveX是基於COM的,這三個類是對這個控件的COM查詢接口的封裝,使你在使用時幾乎不知道自己在使用COM控件。正因為如此,你要想直接查看這個控件的源代碼,也就不可能了。)
圖2
三、功能實現及代碼
1.在網格控件中顯示查詢的數據結果。
數據庫接庫,並取得查詢的數據結果。這裡我使用了一個ADO封裝類(當然你可以使用其它的方法方法數據庫,而不會影響控件的使用)。
CADODatabase m_DBCn;//數據庫對象
CADORecordset m_Rs;//記錄集對象
CDataGRid m_ctrlDG;//DataGrid控件對象
...
CString strConnection; strConnection.Format(_T("Provider=Microsoft.Jet.OLEDB.4.0;")
_T("Data Source=note.mdb"));
m_DBCn.Open((LPCTSTR)strConnection); //打開程序數據庫
m_Rs.SetDatabase(&m_DBCn); m_Rs.Open(_T("select * from test;")); //執行查詢
m_ctrlDG.SetRefDataSource((LPUNKNOW)m_Rs.GetRecordset());//顯示在DataGrid控件中
如圖3:
圖3
2.對網格控件的顯示進行控制(如列寬)。 要實現對列的控制,就要先取得列對象。
CColumns cols = m_ctrlDG.GetColumns();//先取得列集
CColumn col = cols.GetItem(vt); //再取得列集中的列,由VARIANT vt變量指出列的索引號
然後,你就可以對當前列為所欲為,這裡我對它設置列寬 col.SetWidth(fWidth);//fWidth指定列寬 如圖4
圖4
3.對網格內容格式進行控制(如將小於1的小數顯示成百分數)
要設置列的顯示格式,還是要先取得列,再對它設置格式,取得列的方法同上。
col.SetNumberFormat(_T("0.0%"));//百分數格式 如圖5
圖5
4.除此之外,我們還可以對它多行顯示,如圖6
圖6
5.另外,還可以利用消息機制,對控件的HeadClick消息處理,使控件能進行排序。 (具體情況參見源代碼)
四、結束語
細心的朋友會發現,查看相關類的方法名(函數名),能故名思意,看出控件的功能,另外在插入控件時,一般有也幫助文件,不過是針VB的,而且VB的調用方法與VC差別較大,但只有對比VC和VB方法名的相似之處,你還是可以很快對這款控件上手,並運用到你的項目中去。
本文源程序在VC6.0英語版,Windows XP調試通過,並附源程序(工程名 TestGrid)。DataGrid控件的功能遠不止這此,希望本文能拋磚引玉,歡迎有興趣的朋友交流 eMail:[email protected]。
本文配套源碼