对Dev的GridControl/GridView控件进行分组并展开操做

今天在模块编写中碰到了对表格的分组,特地在这里把它记录下来。spa

1、背景:Dev14.1.3,GridControl,.NET4.0+C#设计

2、过程3d

一、GridControl设计code

一共添加4列:在下面主要是对第一和第二列进行操做,根据第一列进行分组,并对第二列进行纵向单元格合并操做;orm

二、最简单的分组对象

仅仅根据“离线要素图层”列展现分组结果,分组标题默认使用Dev自带的设置,代码以下:blog

private void SetGrouping()
        {
            //处理数据源
            PageCtrl_Second();
            MergeDataTables(DsParallel);
            DataColumn dc = new DataColumn("select", typeof(int));
            dc.DefaultValue = 1;
            dtParallel1.Columns.Add(dc);
 
            //将DataTable列绑定到GridControl上
            gc_ClnOffLine.FieldName = dtParallel1.Columns["FeaCls_OffLine"].ColumnName;
            gc_ClnStationseries.FieldName = dtParallel1.Columns["Ss_ID"].ColumnName;
            gc_ClnSelect.FieldName = dtParallel1.Columns["select"].ColumnName;
            gc_ClnPipelineName.FieldName = dtParallel1.Columns["PipeLineName"].ColumnName;
            gridView1.OptionsView.AllowCellMerge = true;
            gc_ClnOffLine.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;
            gc_ClnSelect.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            gc_ClnStationseries.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
 
            //分组
            gc_ClnOffLine.GroupIndex = 0;//设置分组列
 
            gridView1.OptionsBehavior.AutoExpandAllGroups = true;//展开全部分组
            gridControl1.DataSource = dtParallel1;
        }

其中真正起到做用的就是设置分组列的那一行,也就是设置某一列的GroupIndex(该值默认均为-1,即不分组);这是最低的分组显示要求,结果以下图:将“离线要素图层”那一列做为分组列,而后系统默认的显示方式就是[列名+值]事件

固然也能够经过GridControl的事件从新制定分组的名称,须要使用CustomDrawGroupRow事件,实现代码以下:ip

    private void gridView1_CustomDrawGroupRow(object sender, DevExpress.XtraGrid.Views.Base.RowObjectCustomDrawEventArgs e)
    {
        GridGroupRowInfo pGridGroupRowInfo = e.Info as GridGroupRowInfo;
        string strTransfer = string.Format("OffLineFeature:{0}",pGridGroupRowInfo.GroupValueText);
        pGridGroupRowInfo.GroupText = strTransfer;
        //注:GroupValueText的值表明的是这个分组单元格内的值;GroupText的值是最后展现在分组行中的内容
    }

效果如图所示:,分组行展现的内容已经修改成自定义的了。string

三、分组名称+字段统计

有时候,咱们除了须要展现分组的名称以外,还想对每个分组中的数据行数进行统计,此时就须要添加一个GridGroupSummaryItem对象到gridview中,并设置他的DisplayFormat的值和SummaryType的值,具体的值的内容能够在dev代码提示中查看,具体实现以下:

      private void SetGrouping()
      {
            //处理数据源
            PageCtrl_Second();
            MergeDataTables(DsParallel);
            DataColumn dc = new DataColumn("select", typeof(int));
            dc.DefaultValue = 1;
            dtParallel1.Columns.Add(dc);
             
            //将DataTable列绑定到GridControl上
            gc_ClnOffLine.FieldName = dtParallel1.Columns["FeaCls_OffLine"].ColumnName;
            gc_ClnStationseries.FieldName = dtParallel1.Columns["Ss_ID"].ColumnName;
            gc_ClnSelect.FieldName = dtParallel1.Columns["select"].ColumnName;
            gc_ClnPipelineName.FieldName = dtParallel1.Columns["PipeLineName"].ColumnName;
            gridView1.OptionsView.AllowCellMerge = true;
            gc_ClnOffLine.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.True;
            gc_ClnSelect.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
            gc_ClnStationseries.OptionsColumn.AllowMerge = DevExpress.Utils.DefaultBoolean.False;
             
            //分组
            gc_ClnOffLine.GroupIndex = 0;//设置分组列
            DevExpress.XtraGrid.GridGroupSummaryItem item = new DevExpress.XtraGrid.GridGroupSummaryItem();
            item.DisplayFormat = "并行站列数量:{0}";//默认"{0}: [#image]{1} {2}"
            item.SummaryType = DevExpress.Data.SummaryItemType.Count;
            gridView1.GroupSummary.Add(item);
             
             
            gridView1.OptionsBehavior.AutoExpandAllGroups = true;//展开全部分组
            gridControl1.DataSource = dtParallel1;
      }

其实现效果以下图所示,在最初的[列名+值]后面加上了咱们添加进来的GridGroupSummaryItem所指定的值;

扩展:这里我只是添加了一个GridGroupSummaryItem,可是Dev还能够连续添加多个GridGroupSummaryItem到GridView中,多个item之间会用【,】分隔开。

四、总结

  这里的分组我只列出来这两种:①直接展现【列名+值】;②增长一个GridGroupSummaryItem显示相应的统计。

相关文章
相关标签/搜索