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%, ...
随机推荐
- Linux文件同步
简介 文件实时同步对于运维是个很常见的需求. 如集群的机器,需要上传个文件,之前的步骤是每台服务器分别上传. 做文件同步以后,只上传一台,其他机器自动同步. 目前实现实时同步的主流方案有 rsync+ ...
- Where 与 Having
WHERE在数据分组前进行过滤,HAVING在数据分组后过滤. HAVING可以对检索(或计算)出的结果过滤,WHERE则不行. WHERE.聚合函数.HAVING在from后面的执行顺序:WHERE ...
- 华为4K机顶盒EC6108V9U从原联通更换为电信的IPTV账号成功经验
4K设备直接在淘宝上买30块钱升级4K机顶盒,i视视手机app控制电视和手机投屏 硬件设备:EC6108V9U由X省联通更换为四川电信 采坑经验: 1.要从现有的机顶盒获取mac地址.stbid.ip ...
- 360软件的木马查杀、漏洞修复等组件不能使用,提示runtime error
一.故障现象:1.360软件的木马查杀.漏洞修复等组件不能使用,提示runtime error2.暴风影音等很多软件不能正常使用3.设备管理器不能打开,提示“MMC 不能打开文件”4.部分https安 ...
- H5外包 微信小程序外包 小程序外包 就找北京动点开发团队
长年承接微信小程序.微信公众号开发 全职的H5开发团队,开发过几十款微信小程序公众号案例 欢迎来电咨询 QQ:372900288 微信:liuxiang0884 TEL:13911652504
- MyBatis DTD文件下载地址
下载链接: http://mybatis.org/dtd/mybatis-3-config.dtdhttp://mybatis.org/dtd/mybatis-3-mapper.dtd
- Azure CosmosDB (12) 创建Cosmos DB并执行查询语句
<Windows Azure Platform 系列文章目录> The SQL API supports the following aggregate functions. SUM an ...
- 微信小程序云函数Windows下安装wx-server-sdk
第一次上传部署云函数时,会提示这个,建议在这之前先安装一下node.js. https://nodejs.org/en/ 下载nodejs,然后直接安装,在cmd控制台输入node -v和npm -v ...
- Scrapy实战篇(九)之爬取链家网天津租房数据
以后有可能会在天津租房子,所以想将链家网上面天津的租房数据抓下来,以供分析使用. 思路: 1.以初始链接https://tj.lianjia.com/zufang/rt200600000001/?sh ...
- symfony generate bundle autoload failed的解决办法
I also encountered this problem,I add new bundle namespace in composer.json"autoload": { & ...