//不显示内置的导航条。
            gc1.UseEmbeddedNavigator = false;

            //不显示分组的面板
            gv1.OptionsView.ShowGroupPanel = false;
            gv2.OptionsView.ShowGroupPanel = false;

            //自动改变行高适应内容
            gv1.OptionsView.RowAutoHeight = true;
            gv2.OptionsView.RowAutoHeight = true;

            //允许自动合并单元格
            gv1.OptionsView.AllowCellMerge = true;

            //如果主从表中,没有找到从表内容也要显示(默认是不显示的)
            gv1.OptionsDetail.AllowExpandEmptyDetails = true;

            //显示自动筛选行(效果跟Excel的自动筛选差不多)
            gv2.OptionsView.ShowAutoFilterRow = true;

            //使得GridView不能编辑
            gv1.OptionsBehavior.Editable = false;
            gv2.OptionsBehavior.Editable = false;

            //内置编辑器显示的模式
            gv1.OptionsBehavior.EditorShowMode = DevExpress.Utils.EditorShowMode.Click;

            //主从表显示的功能是否可用
            //gv1.OptionsDetail.EnableMasterViewMode = false;

            //如果显示了主从表,每点开个加号,就会显示一个Tabs,里面往往显示了两个面板。
            //事实上没必要这样干的。一般选择关闭。关闭的对象是主GridView的此项属性。
            gv1.OptionsDetail.ShowDetailTabs = false;

            
        }

        private void btnExit_Click(object sender, EventArgs e)
        {
            this.Close();

        }

        private void btnOk_Click(object sender, EventArgs e)
        {
            //设置连接字符串
            DbHelperSQL.ConnectionString = DbHelperSQL.CreateConnectionString(@"BUDDHAS\SQLEXPRESS", "sa", "00000", "RTDMES");

            DataSet ds = new DataSet();
            //父GridView的数据
            string sql = "select sc_prno,sc_prna from mespb04h";
            DbHelperSQL.QueryD(sql,ds,"main");

            //子GridView的数据
            sql = "select pa_name,pa_no,sc_prno from mespb09h";
            DbHelperSQL.QueryD(sql,ds,"son");

            //这个是显示主从表的关键,一、GridControl通过检查DataSet.Relations的内容来分析数据
            //二、关键名必须与设计GridView的层级关系的level name相同,否则,结果在意料之外。
            DataRelation relation = new DataRelation("aa", 
                                                     ds.Tables["main"].Columns["sc_prno"], 
                                                     ds.Tables["son"].Columns["sc_prno"]);
            
            ds.Relations.Add(relation);

            //这也是一个关键,不能直接设为:ds,必须指明到表。
            gc1.DataSource = ds.Tables["main"];
        }

  上面的代码是显示一个主从表。显示主从表有些技巧。文档中还没有说出来,俺摸索了一个晚上才搞出来。像上面看到的,事实上很简单。

  上面DbHelperSQL是我从CodeMatic 2.0中搞出来的,我自己修改了一下。

  上面代码的效果图如下:

  

  

  对于GridView,我有两大疑问:

  一、显示主从表,这个解决了。

  二、分组显示,这是报表中经常要用到的,GridView的解决方案很简捷,只需将相应列的GroupIndex属性设一下就成了:

    在gridcontrol上击右键,选run designer进入设计模式。在columns栏内点retrieve fields将数据源中所有字段导入进来。

 点需要分组的字段,在其属性栏的groupindex依次设为0,1..,在不需要分组的字段上保持-1不变。

 进入feature browse/summary /group sammary /summary items中增加要分组进行统计的字段。这里要设其fieldname字段名,showingroupcolumnfooter 显示在哪一栏位,sammarytype显示分组后统计的字段是进行sum(求和,求平均,最大值,最小值等)

 在grouping /behavior /grneral /可设两个属性
autoexpandallgroups 设为true时将所有分组展开,反之折叠。
 showgroupedcolumns是否在网格是显示你分组依据的哪些字段,false为不显示

   同样在feature browse/summary /total sammary 这些不是针对分组,而是针对所有行。在summaryitem中对要处理的列进行设置,主要设置需要处理列的column,summarytype.

当然设好后要将optionview的showfooter属性设为true,表格底部会出现一summary行。

  补:另有三个属性需要用,我们查询的结果一般是只读的,并且对每一个单元格最好无焦点,故可同时选所有字段,设allowedit为false;allowfocus为false;readonly为true;

为XtraGrid的GridView加行号。示例代码如下:

        //设置行指示器的宽度(行指示器就是最左边那列什么都不显示的列)
        //默认情况下,如果要在里面显示行号的话,宽度会不足,数字显示不清晰
        //所以要改一下宽度
        gv1.IndicatorWidth = 20;

        private void gv1_CustomDrawRowIndicator(object sender, DevExpress.XtraGrid.Views.Grid.RowIndicatorCustomDrawEventArgs e)
        {
            if (e.Info.IsRowIndicator && e.RowHandle >= 0)
            {
                e.Info.DisplayText = (e.RowHandle + 1).ToString().Trim();
            }
        }

  效果图如下:

  

  常用代码:

//添加分组统计字段
gridView1.GroupSummary.Add(SummaryItemType.Count, "Product Name", gridView1.Columns["Product Name"]);
gridView1.GroupSummary.Add(SummaryItemType.Average, "Unit Price", gridView1.Columns["Unit Price"]);

//设置分组统计字段的显示格式
((GridSummaryItem)gridView1.GroupSummary[gridView1.GroupSummary.Count - 1]).DisplayFormat = "AVR={0:c}";

//设置分组字段
gridView1.Columns["Discontinued"].GroupIndex = 0;

//打开所有分组
gridView1.ExpandAllGroups();

//为控件画边框
ControlPaint.DrawBorder3D(e.Graphics,
                          r, 
                          (e.Info.State == DevExpress.Utils.Drawing.ObjectState.Pressed ? Border3DStyle.SunkenOuter

: Border3DStyle.RaisedInner));

//焦点单元格的列
gridview1.FocusedColumn

//焦点单元格所在行的行号
gridview1.FocusedRowHandle

//焦点单元格的值
gridview1.FocusedValue

//指定单元格显示的字符串值
gridview1.GetRowCellDisplayText(int rowHandler,string feildName)

//指定单元格的值
gridview1.GetRowCellValue(int rowHandler,string feildName)

//设置焦点单元格所在行指定列的值
gridview1.SetFocusedRowCellValue(GridColumn col,object value)

//设置焦点单元格的值
gridview1.SetFocusedValue(object value)

//设置指定单元格的值
//有了这个函数,就可以手工创建行了。
gridview1.SetRowCellValue(int rowHandler,string feildName,object value)
gridview1.SetRowCellValue(int rowHandler,GridColumn col,object value)

//添加新行的方法

gv1.AddNewRow();
foreach (GridColumn col in gv1.Columns)
{
  //用RowCount-1的办法是不行的
  //gv1.SetRowCellValue(gv1.RowCount-1, col, "aaaaa");
  gv1.SetRowCellValue(gv1.FocusedRowHandle, col, "aaaaa");
}

gv1.UpdateCurrentRow();

//根据绑定的数据源自动产生列

gv1.PopulateColumns();

//为列添加下拉列表(加其他类型如日期、UpDown同理)
RepositoryItemLookUpEdit ri = new RepositoryItemLookUpEdit();
//ri.PopupWidth = 200;
ri.DisplayMember = "sc_prna";
ri.ValueMember = "sc_prno";
DataTable dt1 = DbHelperSQL.QueryT("select sc_prno,sc_prna from mespb04h");
ri.DataSource = dt1;
gv1.Columns["sc_prno"].ColumnEdit = ri;

Devexpress GridControl使用的更多相关文章

  1. DevExpress GridControl使用方法

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 (1).gridView.AddN ...

  2. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据

    1. 实现DevExpress GridControl 只有鼠标双击后才进行修改数据:修改GridView.OptionsBehavior.EditorShowMode属性为Click 2. 实现De ...

  3. DevExpress GridControl 使用方法技巧 总结 收录整理

    一.如何解决单击记录整行选中的问题 View->OptionsBehavior->EditorShowMode 设置为:Click 二.如何新增一条记录 ().gridView.AddNe ...

  4. DevExpress GridControl使用(转)

    DevExpress GridControl使用 (一)原汁原味的表格展示 Dev控件中的表格控件GridControl控件非常强大.不过,一些细枝末节的地方有时候用起来不好找挺讨厌的.使用过程中,多 ...

  5. Devexpress GridControl z

    http://minmin86121.blog.163.com/blog/static/4968115720144194923578/ 1 AllowNullInput=False; --Devexp ...

  6. DevExpress GridControl 单元格添加进度条(ProgressBar)

    首先可以使用DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所以的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

  7. DevExpress GridControl+UserControl实现分页

    志向不过是记忆的奴隶,生气勃勃地降生,但却很难成长. —— 莎士比亚 时隔一年,我写随笔真的很随意,想起了就来博客园写写,想不起来就任由懒惰支配着我.不过我到觉得这不是什么坏事,你不用为了完成某事而让 ...

  8. DevExpress GridControl 显示外部图片

    如果数据源中只包含图片的链接,如何在DevExpress GridControl的一列中显示外部图片? 要实现该功能,可通过非绑定列的方式来实现.具体实现方法如下: 1.    创建了一个非绑定列并设 ...

  9. DevExpress GridControl如何取消默认的显示方式

    DevExpress GridControl如何取消默认的显示方式,就是表格中好像还嵌套了一个表格,下面有个折叠‘+’按钮,我需要显示的是就是单表格的样式效果. 默认的样式如图: 我需要显示的效果图: ...

  10. 在DevExpress GridControl中添加进度条控件 z

    首先可以使用 DevExpress GridControl 自带的进度条控件. 但是我要用一个方法来设置所有的单元格进度,而不是每个单元格都要设置一遍,同时我想要根据进度值不同,进度条显示不同的颜色. ...

随机推荐

  1. flask + pymysql操作Mysql数据库

    安装flask-sqlalchemy.pymysql模块 pip install flask-sqlalchemy pymysql ### Flask-SQLAlchemy的介绍 1. ORM:Obj ...

  2. vue_cli下开发一个简单的模块权限系统之实现登录

    因为我们需要和后端数据交互,所以我们需要安装axios,安装好以后在main.js引入 v-model是标识空间,v-on:click="doLogin"是登录事件 doLogin ...

  3. CF709B Checkpoints 模拟

    Vasya takes part in the orienteering competition. There are n checkpoints located along the line at ...

  4. 牛客寒假算法基础集训营4 F Applese 的QQ群

    链接:https://ac.nowcoder.com/acm/contest/330/F来源:牛客网 Applese 有一个QQ群.在这个群中,大家互相请教问题.如 b 向 a 请教过问题,就把 a ...

  5. kuangbin专题七 ZOJ1610 Count the Colors (灵活线段树)

    Painting some colored segments on a line, some previously painted segments may be covered by some th ...

  6. Java基础笔记(十九)——抽象类abstract

    抽象类作为父类,不能实例化自己类型的对象,但可以通过向上转型实例化子类对象. public abstract class Animal{  } 比如eat(); ,每个动物子类都应有自己的方法,那An ...

  7. import与from...import...的区别

    from ... import ... 的用法和直接import的区别: 1.直接使用import时,如果需要使用到导入模块内的属性和方法,必须使用模块名.属性和模块名.方法的方式进行调用 2.使用f ...

  8. 简单理解php的socket连接

    socket建立套接的过程图: 首先了解socket 几个主要函数: socket的关键函数1: socket_create($net参数1,$stream参数2,$protocol参数3) 作用:创 ...

  9. stdin stdout stderr 标准I/O流

    Unix中一切皆文件,磁盘等设备在操作系统来看都是文件. 对文件进行操作时,需要打开这个文件,并获得文件描述符(file descriptor, fd) 而每个进程生来就有三个文件描述符绑定在它身上, ...

  10. Go语言基础之18--接口编程

    一.接口介绍和定义 1.1 接口定义了一个对象的行为规范 A. 只定义规范,不实现 B. 具体的对象需要实现规范的细节 葵花宝典: 接口就是一层封装,1个例子,封装一个返还浏览器内容的接口.为什么不直 ...