DevExpress.XtraGrid
DevExpress.XtraGrid控件使用
該控件類是一個表格控件,但是其具有很多方便而使用的功能,例如可以對記錄進行分組,可以再記錄的前面加上checkbox,可以將具有相同值的cell 進行合并等等。Grid分為兩部分,DevExpress.XtraGrid.GridControl??和 DevExpress.XtraGrid.Views.Grid.GridView,GridControl??主要負責數據源、控件整體尺寸等等方面的 控制,GridView主要負責控件是否允許編輯、是否顯示分組等信息,具體可以見VS屬性窗口(本人也是限定在使用上,具體該控件為什么要分為兩部分, 每部分從設計的角度來講起到什么作用等,還沒有具體研究)。Grid的數據源的設置同tree類似,不在贅述,這里主要想介紹一下下面幾個問題:
2.1 DevExpress.XtraGrid分組
設置好數據源后,只需要設置grid的groupIndex就可分組,操作:右鍵/run?designer/colums/選擇一個列/設置 GroupIndex(當然設置前,你需要為grid添加一些column才可以)。分組需要以某一個列進行分組,該列必須要對應到數據源中的某個字段, 即分組是按照數據源中的某些字段進行分組。grid可以顯示多組,第一組的分組列的groupIndex為0,第二組的分組列的groupIndex為 1,依此類推。下例中classID的groupIndex為0,stuNum的groupIndex為1。為了直觀、易于理解,編了個小例子,上段代碼 和效果圖,具體如下:將dt賦值給gridControl的數據源。
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | DataTable?dt?=?new?DataTable("table1"); ????????????dt.Columns.Add("classID",?typeof(int)); ????????????dt.Columns.Add("className",?typeof(String)); ????????????dt.Columns.Add("stuNum",?typeof(int)); ????????????dt.Columns.Add("stuName",?typeof(String)); ????????????dt.Columns.Add("courseName",?typeof(String)); ????????????dt.Columns.Add("hours",?typeof(String)); ????????????dt.Columns.Add("grade",?typeof(String)); ????????????? ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014001,?"李強",?"數據庫",?"64",?"90"}); ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014001,?"李強",?"操作系統",?"64",?"100"?}); ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014001,?"李強",?"軟件工程",?"64",?"80"?}); ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014002,?"王偉",?"數據庫",?"64",?"90"?}); ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014002,?"王偉",?"數據庫",?"64",?"90"?}); ????????????dt.Rows.Add(new?object[]?{?1,?"計算機101班",?2014002,?"王偉",?"數據庫",?"64",?"90"?}); ????????????? ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014003,?"孫明",?"數據庫",?"64",?"90"?}); ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014003,?"孫明",?"操作系統",?"64",?"100"?}); ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014003,?"孫明",?"軟件工程",?"64",?"80"?}); ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014004,?"趙敏",?"數據庫",?"64",?"100"?}); ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014004,?"趙敏",?"數據庫",?"64",?"90"?}); ????????????dt.Rows.Add(new?object[]?{?2,?"計算機102班",?2014004,?"趙敏",?"數據庫",?"64",?"70"?}); |
2.2 DevExpress.XtraGrid修改分組標題
???如上圖所示,分為兩組,每組的標題為“列標題:值”,上例為“班級ID:1”,但有時需要根據記錄中的值,動態修改分組標題。為gridView1 添加CustomDrawGroupRow事件響應函數(注意是GridView而不是GridControl),在函數動態修改標題,為了不顯示重復信 息,可以將班級和學生姓名列隱藏。上碼,上圖,如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private?void?gridView1_CustomDrawGroupRow(object?sender,?DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs?e) ????????{ ????????????DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo?groRowInf?=?e.Info?as? ????????????????DevExpress.XtraGrid.Views.Grid.ViewInfo.GridGroupRowInfo; ????????????int?rowHan?=?groRowInf.RowHandle; ????????????int?rowLev?=?gridView1.GetRowLevel(rowHan); ????????????if?(rowLev?==?0) ????????????{ ????????????????groRowInf.GroupText?=?"班級:"?+?gridView1.GetDataRow(rowHan)["className"].ToString(); ????????????} ????????????if?(rowLev?==?1) ????????????{ ????????????????groRowInf.GroupText?=?gridView1.GetDataRow(rowHan)["stuName"].ToString(); ????????????} ????????} |
?
2.3 DevExpress.XtraGrid添加行號
???為了添加行號,需要添加GridView事件CustomDrawRowIndicator的處理函數,函數中每組所在行的索引從-1開始減小,普 通記錄行從0開始增加。注意需要在grid所在的窗體的加載事件(或者其他的form事件)處理函數中,加上一個代碼 gridView1.IndicatorWidth?=?50;
,否則行號不能顯示,原因沒去研究。注意,當記錄較多grid出現滾動條時,下述代碼會導致行號錯亂,需要注意,這里只是給出顯示行號所需要的一些基本知識和原理。上碼,上圖,如下:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | private?void?Form1_Load(object?sender,?EventArgs?e) ????????{ ????????????gridView1.IndicatorWidth?=?50; ????????} private?void?gridView1_CustomDrawRowIndicator(object?sender,?DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs?e) ????????{ ????????????if?(e.Info.IsRowIndicator) ????????????{ ????????????????if?(gridView1.GetRowLevel(e.RowHandle)?<?2) ????????????????{ ????????????????????e.Info.DisplayText?=?(-e.RowHandle).ToString(); ????????????????} ????????????} ????????????gridView1.UpdateColumnsCustomization(); ????????} |
?
3. 關于DevExpress的一些資料
上面大致的介紹了,tree和grid的使用方法,其實不是很難,只是對于新手而言,可以作為一個簡單的參考,下面再介紹一下當時找到的一些技術貼,供大家參考。
3.1 給TreeList的根和子節點彈出不同的右鍵菜單
http://blog.locoy.com/read-8.html
3.2 DevExpress窗體統一換膚
http://blog.csdn.net/educast/article/details/4730631
3.3 DevExpress在線幫助文檔
https://documentation.devexpress.com/#WindowsForms/DevExpressXtraBarsWinRTLiveTilesWinRTLiveTileManagerMembersTopicAll
4. 總結
寫將近小兩天的時間,總結了一些東西,希望對于新手上路有些幫助,文中如有誤導還請各位大神及時批評指正。其實項目中還有一些關于DevExpress使 用方法的一些難點和問題,但由于項目結題已有三個月的時間,實在是記不得當時是哪里出現的問題,以及如何解決的,下次爭取遇到就記錄下來。最后還是要感謝 那些分享自己技術經歷的各位大師,感謝能夠熱心解答新手問題的各位好友,感謝大家的分享,讓我們借助網絡,我為人人,人人為我,能讓我們在一個又一個的項 目趕工中時刻感受到大家的力量、同行的支持,共同前行。
?
總結
以上是生活随笔為你收集整理的DevExpress.XtraGrid的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: UILable文字不居中问题
- 下一篇: IOS-TextField控件详解