天天看點

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),在函數動态修改标題,為了不顯示重複信

息,可以将班級和學生姓名列隐藏。上碼,上圖,如下:

C# code​​?​​

​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出現滾動條時,下述代碼會導緻行号錯亂,需要注意,這裡隻是給出顯示行号所需要的一些基本知識和原理。上碼,上圖,如下:

​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的根和子節點彈出不同的右鍵菜單

3.2 DevExpress窗體統一換膚

3.3 DevExpress線上幫助文檔