XtraGrid使用心得(折叠式主细档、分组统计)

转载 2012年03月29日 08:50:54
XtraGrid的关键类就是:GridControl和GridView。GridControl本身不显示数据,数据都是显示在GridView/CardView/XXXXView中。GridControl是各种View的容器。所以要控制显示,要从GridView这些类入手。关于GridControl与GridView的关系,我不说了。下面给出一段代码。实际使用中常用到。

        public Form2()
        {
            InitializeComponent();

            //不显示内置的导航条。
            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中搞出来的,我自己修改了一下。

  上面代码的效果图如下:

   XtraGrid使用心得一 - 伯平 - 涤心斋

  XtraGrid使用心得一 - 伯平 - 涤心斋

  对于GridView,我有两大疑问:

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

  二、分组显示,这是报表中经常要用到的,GridView的解决方案很简捷,只需将相应列的GroupIndex属性设一下就成了。 
================================================================================================
为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;

DevExpressControl中的GridControl展现主从表数据结构

用DevExpress的GridControl展示层次数据结构。
  • blogtjf
  • blogtjf
  • 2015年04月21日 16:07
  • 3492

Dev -- GridControl 分组显示

 在绑定数据源的情况下,可以在设计面板中直接设置与分组相关的属性即可。如果数据是在代码中绑定的,采用如下方式分组显示数据:             //列设置            DevExpres...
  • heihei0923
  • heihei0923
  • 2009年11月06日 11:23
  • 5488

DevExpress的NavBarControl组件中NavBarGroup如何触发展开或者折叠事件(点击事件)?

最近在使用DevExpress的NavBarControl组件时候遇到“不知道怎么触发展开或者折叠事件”,经过一番搜索之后发现http://blog.csdn.net/wxm3630478/artic...
  • qiaowei0
  • qiaowei0
  • 2015年11月04日 20:41
  • 2844

dev设置皮肤,字体,折叠菜单,伸缩Panel实现

  • 2015年07月07日 14:43
  • 15.03MB
  • 下载

DevExpress NavBarControl控件鼠标左键单击Group实现Expanded(NavBarGroup触发展开或者折叠事件?)

相应narBarControl控件的 MouseDown事件,代码如下:  private void navBarControl1_MouseDown_1(object sender, Mous...
  • ht_gaogao
  • ht_gaogao
  • 2014年07月02日 17:35
  • 2695

GridControl详解(四)分组排序汇总

分组:   按时间分第一组:   按性别分第二组:   显示结果:   高级设置:   将所有组展开代码:gridView1.ExpandAl...
  • nanchuan
  • nanchuan
  • 2012年06月21日 10:31
  • 14858

C# Dev GridView 分组列(GroupSummary)显示样式的设置

最近使用 DevPress
  • shuaishifu
  • shuaishifu
  • 2014年11月13日 09:25
  • 7477

DevExpress.XtraGrid 分组

一、手动方式 1、添加分组项,Run Designer--Group Summary Items--Add,设置计算添加SummaryType:Count总计 2、设置显示格式 ...
  • alisa525
  • alisa525
  • 2012年06月19日 17:26
  • 7517

gridcontrol实现分组,并实现分组总计,平均统计

  • 2015年06月27日 21:29
  • 64KB
  • 下载

devexpress表格gridcontrol实现列统计,总计,平均,求和等。

1、在许多项目中,经常要实现对某些列的统计。devexpress控件gridcontrol实现这些功能只需要设置某些属性,就可以达到要求了。以下例举了一个统计班级总数,人数总计,分数总计的案例。效果图...
  • kehaigang29
  • kehaigang29
  • 2015年06月29日 00:36
  • 5283
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:XtraGrid使用心得(折叠式主细档、分组统计)
举报原因:
原因补充:

(最多只允许输入30个字)