博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
DevExpress.XtraGrid
阅读量:5982 次
发布时间:2019-06-20

本文共 4265 字,大约阅读时间需要 14 分钟。

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的数据源。

C# code
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
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出现滚动条时,下述代码会导致行号错乱,需要注意,这里只是给出显示行号所需要的一些基本知识和原理。上码,上图,如下:

C# code
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使 用方法的一些难点和问题,但由于项目结题已有三个月的时间,实在是记不得当时是哪里出现的问题,以及如何解决的,下次争取遇到就记录下来。最后还是要感谢 那些分享自己技术经历的各位大师,感谢能够热心解答新手问题的各位好友,感谢大家的分享,让我们借助网络,我为人人,人人为我,能让我们在一个又一个的项 目赶工中时刻感受到大家的力量、同行的支持,共同前行。

 

你可能感兴趣的文章
Django 向数据表中添加字段方法
查看>>
在ReportViewer中使用超链接(HyperLink)
查看>>
Django REST framework+Vue 打造生鲜超市(二)
查看>>
http://cuiqingcai.com/993.html
查看>>
七 oracle 表查询二
查看>>
给ARM初学者的建议
查看>>
study topics
查看>>
io分析神器blktrace
查看>>
第三篇 第四章自动喷水灭火系统 (二)
查看>>
LinkedBlockingDeque
查看>>
iOS7 兼容及部分细节
查看>>
[C#]MemoryStream.Dispose之后,为什么仍可以ToArray()?
查看>>
js基本数据类型 BigInt 和 Number 的区别
查看>>
Request JSON
查看>>
转 Solr vs. Elasticsearch谁是开源搜索引擎王者
查看>>
转://Window下安装Oracle ASM单实例数据库
查看>>
solrCloud+zk+tomcat配置
查看>>
Java 程序中的多线程(四)
查看>>
【NOI2018模拟5】三角剖分Bsh
查看>>
redis安装使用
查看>>