http://www.cnblogs.com/zeroone/p/4574539.html

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 【转】的更多相关文章

  1. DevExpress.XtraGrid.view.gridview 属性说明

    本文摘自: http://www.cnblogs.com/-ShiL/archive/2012/06/08/ShiL201206081335.html (一)双击展开,收缩字表 ExpandedChi ...

  2. DevExpress.XtraGrid.GridControl 实现自定义tooltip

    DevExpress.XtraGrid.GridControl 控件默认的tooltip显示的每一个单元格的文本值,但是实际工作中会出现各种需求.我这里就有一个列是折扣率显示的值是0-1之间的两位小数 ...

  3. DevExpress.XtraGrid winform试用分享

    DevExpress.XtraGrid在winform里使用还挺麻烦,为了减少重复代码和代码复用,本人针对DevExpress.XtraGrid封装了一个Form的基类,其中涵盖了DevExpress ...

  4. DevExpress.XtraGrid.Views 设置指定行的背景颜色 .

    如需要将指定行的背景设置颜色,可参考以下示例 1.事件:CustomDrawCell 2.示例: private void gridView1_CustomDrawCell(object sender ...

  5. DevExpress.XtraGrid.Views.BandedGrid.BandedGridView

    使用的是DevExpress.XtraGrid.Views.BandedGrid.BandedGridView 类 没有在工具箱里找到对应控件 ,绕了一下,先创建一个gridcontrol ,然后gr ...

  6. DevExpress XtraGrid 数据导出导入Excel

    // <summary> /// 导出按钮 /// </summary> /// <param name="sender"></param ...

  7. 实现在DevExpress.XtraGrid.GridControl的列头绘制复选框以实现全选的功能

    首先新建一个Win Form测试项目,拖一个GridControl控件到窗体上. public partial class Form1 : Form { public Form1() { Initia ...

  8. DevExpress.XtraGrid.GridControl中数据源的绑定问题

    在利用DevExpress.XtraGrid.GridControl作为一个可编辑的表格控件时,在利用控件之前,先将一个初始化的DataTable对象作为GridControl的数据源进行绑定.可是在 ...

  9. DevExpress.XtraGrid

    DevExpress.XtraGrid控件使用 该控件类是一个表格控件,但是其具有很多方便而使用的功能,例如可以对记录进行分组,可以再记录的前面加上checkbox,可以将具有相同值的cell 进行合 ...

随机推荐

  1. Python虚拟机之for循环控制流(二)

    Python虚拟机中的for循环控制流 在Python虚拟机之if控制流(一)这一章中,我们了解if控制流的字节码实现,在if控制结构中,虽然Python虚拟机会在不同的分支摇摆,但大体还是向前执行, ...

  2. PHP如何利用sleep实现 输出->等待->输出

    sleep()函数一般用在暂停上,但是一个PHP一旦有了sleep,其他的输出(print,echo)就都要等待sleep()函数的完成,这是因为缓冲区,这里有详细解释 在这里不赘述,而如果要实现先输 ...

  3. 修改Typora的快捷键【markdown软件】

    修改Typora的快捷键 魔芋:Typora是一款不错的编写markdowm的软件,推荐使用. 魔芋:修改这个文件conf.user.json   "keyBinding": { ...

  4. 大数据学习——scala集合练习

    package com /** * Created by ZX on 2016/4/5. */ object ListTest { def main(args: Array[String]) { // ...

  5. Leetcode 457.环形数组循环

    环形数组循环 给定一组含有正整数和负整数的数组.如果某个索引中的 n 是正数的,则向前移动 n 个索引.相反,如果是负数(-n),则向后移动 n 个索引. 假设数组首尾相接.判断数组中是否有环.环中至 ...

  6. 安装anaconda并配置环境

    安装anaconda的步骤 1.确定系统信息 uname -a 2.下载对应版本 3.sh 安装shell脚本 4.添加到对应路径 5.安装完anaconda之后,创建虚拟环境 conda creat ...

  7. DefaultTransactionStatus源码

    package org.springframework.transaction.support; import org.springframework.transaction.NestedTransa ...

  8. 设计模式(二十二)模板方法模式 Template

    泡茶?泡咖啡? 我们用泡茶和泡咖啡两种行为来引入这一设计模式. 思考一下“泡茶”的过程: 煮水 -> 用沸水泡茶叶 -> 把茶倒进杯子 -> 放点柠檬之类的佐料. 然后再看一下“泡咖 ...

  9. 【bzoj1040】[ZJOI2008]骑士 并查集+基环树dp

    题目描述 Z国的骑士团是一个很有势力的组织,帮会中汇聚了来自各地的精英.他们劫富济贫,惩恶扬善,受到社会各界的赞扬.最近发生了一件可怕的事情,邪恶的Y国发动了一场针对Z国的侵略战争.战火绵延五百里,在 ...

  10. 完全平方数(bzoj 2440)

    Description 小 X 自幼就很喜欢数.但奇怪的是,他十分讨厌完全平方数.他觉得这些数看起来很令人难受.由此,他也讨厌所有是完全平方数的正整数倍的数.然而这丝毫不影响他对其他数的热爱. 这天是 ...