首先需要属性栏中设置这一列可以合并,再在CellMerge方法中写

 private void gridView1_CellMerge(object sender, DevExpress.XtraGrid.Views.Grid.CellMergeEventArgs e)
{
if (e.Column.FieldName == "题目" || e.Column.FieldName == "分值" )
{
string valueFirstColumn1 = Convert.ToString(gridView1.GetRowCellValue(e.RowHandle1, gridView1.Columns["三级标题"]));
string valueFirstColumn2 = Convert.ToString(gridView1.GetRowCellValue(e.RowHandle2, gridView1.Columns["三级标题"]));
if(valueFirstColumn1 == valueFirstColumn2 )
{
e.Merge =true ;
if (e.RowHandle2 > maxhandle && e.Column.FieldName == "题目")
{
string lastValue = gridView1.GetRowCellValue(e.RowHandle1, gridView1.Columns["题目"]).ToString();
string repeatValue = gridView1.GetRowCellValue(e.RowHandle2, gridView1.Columns["题目"]).ToString();
gridView1.SetRowCellValue(e.RowHandle1, gridView1.Columns["题目"], lastValue + "\n" + repeatValue);
maxhandle = e.RowHandle2;
int fenzhiValue= Convert.ToInt32(gridView1.GetRowCellValue(e.RowHandle1, gridView1.Columns["分值"]));
int fenzhiRepeatValue= Convert.ToInt32(gridView1.GetRowCellValue(e.RowHandle2, gridView1.Columns["分值"]));
gridView1.SetRowCellValue(e.RowHandle1, gridView1.Columns["分值"], fenzhiValue + fenzhiRepeatValue); } }
e.Handled = true;
} }

  目的是根据三级标题这一列如果有连续相同的数据,就合并题目列、分值列,并且把合并的那几行内容都显示出来而不是只显示合并的第一行。

cellmerge函数中if(valueFirstColumn1 == valueFirstColumn2 )里面最开始的执行顺序是,从行号为0开始如果前两行相等,e.RowHandle1和e.RowHandle2分别是0、1,如果前三行相等,接下来就是0、2,直到所有连续的相同的检索完,然后第四行、第五行相等,接下来就是3、4...............每次判断两行。不知道为啥最后又重新检索了一遍?,为了实现合并时文字不丢失/数字合并时自动相加,用了一个maxhandle做限制来保证它一直按这个顺序进行。

然而运行时form.ShowDialog();会报无参错误,难道是这个事件有什么本身有什么问题?反正代码没查出来问题,只有一个奇怪现象,进去之后打印或者导出一遍就不会报错,能实现功能最好,原因真找不着。然后加载之后就设置导出excel一遍,好了。。。。

   /// <summary>
/// 导出excel临时文件
/// </summary>
/// <param name="panels"></param>
private void ExportTest(params IPrintable[] panels)
{
SaveFileDialog saveFileDialog = new SaveFileDialog();
saveFileDialog.FileName = "gridtest";
saveFileDialog.Title = "导出Excel";
saveFileDialog.Filter = "Excel文件(*.xlsx)|*.xlsx|Excel文件(*.xls)|*.xls";
string FileName ="C:/gridtest.xlsx";
PrintingSystem ps = new PrintingSystem();
CompositeLink link = new CompositeLink(ps);
ps.Links.Add(link);
foreach (IPrintable panel in panels)
{
link.Links.Add(CreatePrintableLink(panel));
}
link.Landscape = true;
try
{
int count = ;
//在重复名称后加(序号)
while (File.Exists(FileName))
{
if (FileName.Contains(")."))
{
int start = FileName.LastIndexOf("(");
int end = FileName.LastIndexOf(").") - FileName.LastIndexOf("(") + ;
FileName = FileName.Replace(FileName.Substring(start, end), string.Format("({0}).", count));
}
else
{
FileName = FileName.Replace(".", string.Format("({0}).", count));
}
count++;
}
//MessageBox.Show(FileName);
if (FileName.LastIndexOf(".xlsx") >= FileName.Length - )
{
XlsxExportOptions options = new XlsxExportOptions();
link.ExportToXlsx(FileName, options);
}
else
{
XlsExportOptions options = new XlsExportOptions();
link.ExportToXls(FileName, options);
}
}
catch (Exception ex)
{
DevExpress.XtraEditors.XtraMessageBox.Show(ex.Message);
}
}

gridcontrol 根据某一列数据来控制其他列合并的更多相关文章

  1. SQL case when then end根据某列数据内容在新列显示自定义内容

    ') then '实习' ' ) then '赤脚医生' ' ) then '村卫生员' ' ) then '乡卫生员' ' ) then '镇卫生员' ' ) then '医师' ' ) then ...

  2. GridControl详解(三)列数据的格式设置

    为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串.代码增加下列部分: //格式增加 dt.Columns.Add("数据",typeof(decimal)); dt.C ...

  3. jquery通过ajax获取数据,控制显示的数据条数

    效果图: 现在我们可以先看它的json数据,如图所示:                然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ...

  4. Jquery DataTable控制显示列,导出EXCEL

    1.初始化 var table = $('#table').DataTable({ "data": data[0].DATA, "columns": data[ ...

  5. 使用Spark加载数据到SQL Server列存储表

    原文地址https://devblogs.microsoft.com/azure-sql/partitioning-on-spark-fast-loading-clustered-columnstor ...

  6. SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制

    一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...

  7. Oracle 列数据聚合方法汇总

    网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...

  8. c# 如何中List<object>中去掉object对象中的重复列数据?

    //去掉重复 var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.F ...

  9. VBA Excel 对比两列数据

    Sub Md() ' ' Macro1 Macro ' 宏由 BX 录制,时间: 2012-6-8 ' 宏中的列数可以输入 A - IV 也可以输入 1-256 ' Dim i%, j%, i1%, ...

随机推荐

  1. JavaScript判断该对象是否为数组

    typeof 用来检测数据类型,Function, String, Number, Undefined都可以使用typeof来判断. function test(){} console.log(typ ...

  2. git编译安装

    因yum安装的git版本过低,所以尝试使用编译安装git 以下为编译安装时执行的命令 tar xf git-2.9.5.tar.gz cd git-2.9.5yum install curl-deve ...

  3. Hot Chocolate 一个.net 平台的graphql 框架

    在看昨天发布的新版技术雷达中,看到了一个.net 的graphql 框架Hot Chocolate 还是比较激动,尽管好久不搞 .net 了,但是这个框架还是值得看看的,后边学习下 参考资料 http ...

  4. jQuery实现的3个基础案例(仿QQ列表分组,二级联动下拉框,模拟员工信息管理系统)

    1.仿QQ列表分组 <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type&quo ...

  5. httpd日志格式

    日志的缺省格式有如下几种: LogFormat "%h %l %u %t "%r" %>s %b "%{Referer}i" "%{U ...

  6. USD在CentOS7.0操作系统下的安装方法

    最近Pixar的开源USD软件很火,官方在Introduce中明确讲到这个软件的设计开发目标是增强艺术家协作,减少不确定因素,最大化资产版本迭代效率,追求更大的承载能力. 当今行业中传统的线性的制作方 ...

  7. fragment滑动界面

    1.代码页面 package com.example.fragment_list_copy; import android.app.FragmentManager;import android.sup ...

  8. python-pcl

    python-pcl安装和使用 https://blog.csdn.net/joker_hapy/article/details/85006818 Ubuntu16.04下安装PCL及python-p ...

  9. Git使用,将本地项目推送到GitHub上

    首先本地仓库中创建一个项目 ex: proA 在远程github仓库中创建项目 ex: proA 在本地仓库proA下打开terminal 使用命令: 1.git add * 2.git commit ...

  10. Web前端数据存储

    Cookie 会跟随每次请求附加到请求header上,大小限制4k. 部署对象: document.cookie 构成: Key-Value 有效期:根据expires配置 可选项: ;path=pa ...