摘 要:DevExress控件是VS.net開發(fā)中應(yīng)用最廣、效果最出眾的控件包之一。本文通過充分運(yùn)用了DevExpress控件中的XtraGrid組件,快速實(shí)現(xiàn)了數(shù)據(jù)顯示組件常用功能提高了工作效率,節(jié)省了寶貴的時(shí)間,并且該組件的使用還受到廣大用戶的好評(píng)。
關(guān)鍵詞:DevExpress控件;數(shù)據(jù)顯示組件
DevExpres產(chǎn)品是全球享有極高聲譽(yù)的一流控件套包產(chǎn)品。國(guó)內(nèi)典型用戶包括:用友、金蝶、神州數(shù)碼、工信部、中國(guó)石化、漢王科技等眾多大中型科技型企業(yè)。不足的是該控件包自帶的演示中、沒有運(yùn)行時(shí)配置(動(dòng)態(tài)設(shè)置)控件屬性的介紹,這對(duì)于很多軟件開發(fā)工作來說,很不方便。本人結(jié)合自己工作經(jīng)驗(yàn),探討基于基于DevExpress的數(shù)據(jù)顯示組件開發(fā)技術(shù)。
1 數(shù)據(jù)顯示組件應(yīng)用需求
⑴單記錄與多記錄方式混合顯示:當(dāng)查詢結(jié)果有多條記錄時(shí),由于很多數(shù)據(jù)表中的數(shù)據(jù)項(xiàng)非常多,用戶經(jīng)常需要左右滾動(dòng)才能查看該記錄中的所有數(shù)據(jù)項(xiàng),非常不適合用戶使用習(xí)慣。這樣數(shù)據(jù)查詢顯示組件設(shè)計(jì)時(shí)可考慮在窗口的左方設(shè)為多記錄顯示方式,右方為單記錄顯示方式,當(dāng)用戶點(diǎn)擊左方某一行時(shí),將該記錄的數(shù)據(jù)同步在右方進(jìn)行單記錄顯示。⑵常用字段定制功能:數(shù)據(jù)庫(kù)中各類數(shù)據(jù)表中的數(shù)據(jù)項(xiàng)存在非常多的現(xiàn)象。要組織好這些數(shù)據(jù)項(xiàng)解決當(dāng)前的問題,數(shù)據(jù)顯示組件需要提供常用字段定制功能,由用戶自己進(jìn)行定制數(shù)據(jù)項(xiàng)的顯示與隱藏才是最有效的解決方案。⑶數(shù)據(jù)快速搜索功能:數(shù)據(jù)庫(kù)中某些數(shù)據(jù)表記錄條數(shù)能達(dá)到成千上萬條,是一個(gè)數(shù)據(jù)量很大的集合。如何從數(shù)據(jù)表中查詢出想要記錄信息呢?因此,組件有必要設(shè)計(jì)“數(shù)據(jù)快速搜索”功能,通過精確查詢和模糊查詢的方式完成信息快速定位。⑷字段分組統(tǒng)計(jì)功能:查詢結(jié)果顯示出來后,可以對(duì)某一列進(jìn)行統(tǒng)計(jì),主要是針對(duì)數(shù)據(jù)類型的列,可以統(tǒng)計(jì)其最大值、最小值、累計(jì)值、平均值等。(5)選中記錄行并通過右鍵菜單調(diào)用其他數(shù)據(jù)顯示模塊功能:在實(shí)際應(yīng)用中會(huì)需要關(guān)聯(lián)其他數(shù)據(jù)表的查詢,組件還需要提供關(guān)聯(lián)查詢的功能接口。(6)文檔查詢功能:很多文檔在數(shù)據(jù)庫(kù)中都以Blob、Clob字段類型存放,數(shù)據(jù)顯示時(shí)組件應(yīng)以超鏈的形式關(guān)聯(lián)查詢數(shù)據(jù)表中存放的Word、Pdf等格式的文檔資料。(7)鎖定列功能:當(dāng)數(shù)據(jù)項(xiàng)比較多的時(shí)候,用戶橫向滾動(dòng)時(shí),往往最后不知該記錄是哪口井、哪個(gè)研究工區(qū)的數(shù)據(jù),這時(shí)需要將前面幾列進(jìn)行鎖定,鎖定后再滾動(dòng)時(shí),就可以看到該記錄具體的信息了。
2 DevExpress實(shí)現(xiàn)方法
⑴單記錄與多記錄方式混合顯示實(shí)現(xiàn):XtraGrid負(fù)責(zé)實(shí)現(xiàn)多記錄顯示,單記錄的顯示由XtraVerticalGrid負(fù)責(zé)完成。XtraGrid和XtraVerticalGrid分別先與數(shù)據(jù)源進(jìn)行綁定,dataSet為通過數(shù)據(jù)查詢服務(wù)獲取到的數(shù)據(jù)庫(kù)查詢結(jié)果集:this.gridControl.DataSource=dataSet.Tables[0];this.vGridControl.DataSource=dataSet.Tables[0];
⑵在XtraGrid中完成功能:XtraGrid的關(guān)鍵類就是GridControl和GridView。GridControl本身不顯示數(shù)據(jù),數(shù)據(jù)都是顯示在GridView中。GridControl是各種View的容器。所以要控制顯示,要從GridView這些類入手。GridView的OptionsMenu中的默認(rèn)屬性設(shè)置可以完成數(shù)據(jù)項(xiàng)的排序、過濾查詢、快速查找、分組統(tǒng)計(jì)、字段定制、字段寬度調(diào)整等功能,軟件開發(fā)人員不需編寫一行代碼。GridView其他屬性設(shè)置:
gridView.OptionsBehavior.Editable=1;//禁止編輯數(shù)據(jù)
gridView.OptionsView.ShowGroupPanel=1;//初始分組隱藏
gridView.Appearance.OddRow.BackColor=Color.AliceBlue;//設(shè)置奇行顏色
AllowDeleteRows=False;AllowAddRows=False;//設(shè)置數(shù)據(jù)庫(kù)記錄的增刪
//設(shè)置鎖定列,通過遍歷gridView.Columns根據(jù)列位置跟選中列位置比較進(jìn)行鎖定。
if(GridColumn.ColumnHandle<=gridView.FocusedColumn.ColumnHandle)
{GridColumn.Fixed=DevExpress.XtraGrid.Columns.FixedStyle.Left;}
//記錄的上下滾動(dòng),關(guān)鍵方法是:
if(e.Delta<0)view.MoveNext();elseif(e.Delta>0)view.MovePrev();
//添加序號(hào)列,在gridView_CustomDrawRowIndicator方法中添加:
introwIndex=e.RowHandle;if(e.Info.IsRowIndicatorrowIndex>=0)
{rowIndex+=1;e.Info.DisplayText=rowIndex.ToString();}
//右鍵菜單關(guān)聯(lián)顯示,在gridView_MouseUp方法中完成。
if(this.gridView.Columns.ColumnByFieldName(\"字段名稱\")!=1)
{//可以在此處創(chuàng)建右鍵菜單內(nèi)容項(xiàng)}
//blob字段超級(jí)鏈接顯示
RepositoryItemHyperLinkEditvHyperLinkEdit=newRepositoryItemHyperLinkEdit();
vHyperLinkEdit.Caption=\"打開\";
row.Properties.RowEdit=vHyperLinkEdit;row.Appearance.Font=newSystem.Drawing.Font(\"Tahoma\",8.25F,System.Drawing.FontStyle.Bold);row.Appearance.BackColor=Color.Pink;
//查詢結(jié)果保存,filename為要保存的文件名稱。
BaseView.ExportToXls(filename);BaseView.ExportToXlsx(filename)等方法。
[參考文獻(xiàn)]
[1]盛健,季曉勇.DirectShow過濾器組件開發(fā)技術(shù)及其應(yīng)用實(shí)例[J].微型機(jī)與應(yīng)用,2004,23(1):47-49.
[2]李福紅.DevExpres表格控件運(yùn)行時(shí)動(dòng)態(tài)設(shè)置表格列高級(jí)技巧(一)[J].電腦編程技巧與維護(hù),2011(3):32-34.