gridcontrol 根据某一列数据来控制其他列合并
首先需要属性栏中设置这一列可以合并,再在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 根据某一列数据来控制其他列合并的更多相关文章
- SQL case when then end根据某列数据内容在新列显示自定义内容
') then '实习' ' ) then '赤脚医生' ' ) then '村卫生员' ' ) then '乡卫生员' ' ) then '镇卫生员' ' ) then '医师' ' ) then ...
- GridControl详解(三)列数据的格式设置
为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串.代码增加下列部分: //格式增加 dt.Columns.Add("数据",typeof(decimal)); dt.C ...
- jquery通过ajax获取数据,控制显示的数据条数
效果图: 现在我们可以先看它的json数据,如图所示: 然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据 ...
- Jquery DataTable控制显示列,导出EXCEL
1.初始化 var table = $('#table').DataTable({ "data": data[0].DATA, "columns": data[ ...
- 使用Spark加载数据到SQL Server列存储表
原文地址https://devblogs.microsoft.com/azure-sql/partitioning-on-spark-fast-loading-clustered-columnstor ...
- SpringCloud微服务实战——搭建企业级开发框架(二十八):扩展MybatisPlus插件DataPermissionInterceptor实现数据权限控制
一套完整的系统权限需要支持功能权限和数据权限,前面介绍了系统通过RBAC的权限模型来实现功能的权限控制,这里我们来介绍,通过扩展Mybatis-Plus的插件DataPermissionInterce ...
- Oracle 列数据聚合方法汇总
网上流传众多列数据聚合方法,现将各方法整理汇总,以做备忘. wm_concat 该方法来自wmsys下的wm_concat函数,属于Oracle内部函数,返回值类型varchar2,最大字符数4000 ...
- c# 如何中List<object>中去掉object对象中的重复列数据?
//去掉重复 var title = modelList.GroupBy(m => m.Title.ToLower().Trim()).Select(m => new { ID = m.F ...
- VBA Excel 对比两列数据
Sub Md() ' ' Macro1 Macro ' 宏由 BX 录制,时间: 2012-6-8 ' 宏中的列数可以输入 A - IV 也可以输入 1-256 ' Dim i%, j%, i1%, ...
随机推荐
- C# 每个字节接受 处理串口数据 的方法
/// <summary> /// 向串口发送信息,有返回值 /// </summary> /// <param name="serialPort" ...
- 通过type类型 新建对象
Activator根System命名空间中的类非常强大. 将参数传递给构造函数等有很多重载.查看以下文档: http://msdn.microsoft.com/en-us/library/system ...
- java-项目中无法访问js、css等静态资源
解决方法:在mvc.xml配置文件中增加如下配置 如果增加<mvc:default-servlet-handler/> 后无法访问controller,需要增加<mvc:annota ...
- ZoomIt: 非PPT演示必备辅助软件
下载地址:https://docs.microsoft.com/zh-cn/sysinternals/downloads/zoomit 使用方法: 另一个免费的屏幕标注工具:Pointofix v1. ...
- CURL 支持 GET、PUT、POST、DELETE请求
一个方法解决所有的 curl 请求的问题. <?php function curlTypeData( $method, $url, $data=false, $json=false ) { $d ...
- Android Studio中绘制simpleUML类图详细说明及使用
一.Android Studio中安装simpleUML 1.下载simpleUML jar包 地址为:http://plugins.jetbrains.com/ 搜索 simpleUMLCE 2. ...
- Ubuntu平台rm误删的文件如何恢复
安装:Ubuntu下也可以直接用apt-get来获取extundelete 以我自己的Ubuntu14.04.3来看: df 命令是linux系统上以磁盘分区为单位来查看文件系统的命令,后面可以加上不 ...
- 未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用
ylbtech-未来-区块链-Micron:区块链永远不会忘记:内存对这项革命性技术的推动作用 1.返回顶部 1. 俗话说,大象永远不会忘记.区块链亦是如此. 内存是区块链的核心,它是一种以关键方式构 ...
- Java中的io流学习(了解四大基类和基本步骤)
Java中io流四大基类及io流操作四大基本步骤 io流:(input/output)即输入输出流.面向对象的思想之一是面向接口编程,面向父类编程,也就是多态.所以学好基类(父类)很重要. 分类 按处 ...
- 03-自己封装DateUtil工具类
package com.utils; import java.text.ParseException; import java.text.SimpleDateFormat; import java.u ...