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相关推荐
- DevExpress学习之DevExpress.XtraGrid.Columns.GridColumn
当用到DevExpress中的DevExpress.XtraGrid.Columns.GridColumn列时,会根据数据来设置其属性. 列的读写属性可见:http://hi.baidu.com/ce ...
- DevExpress.XtraGrid.GridControl中数据源的绑定问题
在利用DevExpress.XtraGrid.GridControl作为一个可编辑的表格控件时,在利用控件之前,先将一个初始化的DataTable对象作为GridControl的数据源进行绑定.可是在 ...
- DevExpress.XtraGrid.view.gridview 属性说明
(一)双击展开,收缩字表 ExpandedChild 1 Private Sub ExpandedChild(ByVal sender As DevExpress.XtraGrid.Views.Gri ...
- DevExpress.XtraGrid 导出文本的bug
作者:不详 出处:Byeah's Blog 2011/4/8 15:47:38 阅读 434 次 DevExpress.XtraGrid.GridControl有多个ExportToXXX的方法, ...
- DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法(转)
DevExpress XtraGrid RepositoryItemCheckEdit 复选框多选的解决方法(转) 参考文章: (1)DevExpress XtraGrid RepositoryIte ...
- DevExpress XtraGrid网格控件示例四:初始化新建行的单元格
下面的代码显示了如何利用ColumnView.InitNewRow事件初始化新创建行的PurchaseDate字段: C# 1 using DevExpress.XtraGrid.Views.Grid ...
- Devexpress XtraGrid 控件编辑的内容,如何实时生效
举个例子,有一个列编辑器repositoryItemImageComboBox选择框,当选择了以后值是不会保存起来的(不会生效),只有当该GridCell失去焦点的时候,才会保存. 原文解决方法在这里 ...
- DevExpress xtraGrid控件的使用
电脑上面安装DXperienceXaf-9.2.6(我用的是这个版本,最新的更好),安装完成之后打开VS2008会发现 工具栏中多出了很多的控件,都是DevExpress 里面的,由于这控件是收费的东 ...
- DevExpress.XtraGrid.Views.Grid.GridView 选中行焦点的滚动条的位置
最近客户需求,让显示数据的表格中选中最后一行数据,绑定代码如下: 1 gcnYM.DataSource = dt; 2 gvYM.BestFitColumns(); 3 4 for (int i = ...
最新文章
- Boosting、Adaboost、AdaBoost模型的优缺点、提升树、梯度提升树GBDT
- scala 学习笔记(07) 一等公民的函数
- DLL中导出函数的声明有两种方式
- AB1601编译优化参数引发的问题
- AtCoder AGC033C Removing Coins (博弈论)
- python __call__
- ubuntu修改服务器端,修改ubuntu 服务器配置
- php redis菜鸟教程,PHP 使用 Redis
- libevent核心思想:epoll反应堆模型
- css让全局字体为微软雅黑,wordpress主题通过自定义CSS实现全局更换微软雅黑字体...
- 【在linux系统中使用绘王HC16数位板绘画】
- 小象学院深度学习之TensorFlow高级实战
- 输入一个英文字母(可能是大写,也可能是小写),输出该字母在字母表中的序号(’a’和’A’的序号为1)
- 如何在线制作gif图片?
- word公式转换神器GrindEQ 多次使用方法
- EAI_BOT越登智能车
- leetcode——340.至多包含 K 个不同字符的最长子串
- KOOK使用过程有杂音如何解决
- 秒杀刘海屏,有望实现手机|平板|电脑三合一,可折叠屏幕究竟是何方神圣?
- Sublime Text3 快捷键