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 = 1;
                //在重复名称后加(序号)
                while (File.Exists(FileName))
                {
                    if (FileName.Contains(")."))
                    {
                        int start = FileName.LastIndexOf("(");
                        int end = FileName.LastIndexOf(").") - FileName.LastIndexOf("(") + 2;
                        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 - 5)
                {
                    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);
            }
        }

原文地址:https://www.cnblogs.com/chenxiya/p/10289078.html

时间: 2024-10-12 11:57:07

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

datatable 根据某一列数据来控制其他列合并

gridcontrol根据列合并后打印预览会有点问题,在翻页后偶尔会多显示一行.因为之前合并的方法是把这其余几行全部附加到第一行.被合并的那几行本来有内容没有删掉才导致这样.所以需要把这些内容删掉.各种问题太多,还是在绑定数据之前修改datatable好了. System.Data.DataTable dt = new System.Data.DataTable(); string current3 = string.Empty; string current4 = string.Empty;

[办公应用]两个单独的列数据快速变为两列匹配关联数据

一个会计朋友有两列数据,表一内的列是"成本中心"代码(假定157个),表二的列是"承诺项"代码(假定30个).他想得到新表,包含两列数据,第一列为成本中心,第二列为对应的承诺项.也就是说,每一个成本中心30行,共计157*30行数据.如果数据少,还可以粘贴.复制,但是数据多,这个办法肯定就不行了. 怎么办呢? 刚好最近读到<让excel飞>,里面提到"查询",采用access 2007的查询功能即可方便的实现. 大致步骤如下: 1.将

Excel表格将一列数据分割成多列数据

测试格式:.xlsx, 测试软件:Wps 1. 选定一个单元,将复制的内容粘贴在其中,这是的数据是多行一列,选择文档助手 2. 点击文本处理的高级分列操作 3. 可以根据自己的需求分割,这里是按照空格分列 4. 分列结束后,所看到的就是成多列的情况,这时候就可以筛选排序等操作了 原文地址:https://www.cnblogs.com/Lunix-touch/p/12350536.html

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

为了测试方便,我们加入新的3列,格式分别是数据,时间,字符串.代码增加下列部分: //格式增加 dt.Columns.Add("数据",typeof(decimal)); dt.Columns.Add("时间",typeof(DateTime)); dt.Columns.Add("自定义",typeof(string)); dt.Rows.Add(new object[] { 1, "张三", 1,"东大街6号&qu

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

效果图: 现在我们可以先看它的json数据,如图所示:                然后可以对应我们的代码进行理解. jquery通过ajax获取数据,并通过窗口大小控制显示的数据条数,以及可以根据需求隐掉列数据. <!doctype html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> html,body {

python pandas 获取列数据的几种方法及书写形式比较

pandas获取列数据位常用功能,但在写法上还有些要注意的地方,在这里总结一下: ''' author: zilu.tang 2015-12-31 ''' import pandas as pd data1 = pd.DataFrame(...) #任意初始化一个列数为3的DataFrame data1.columns=['a', 'b', 'c'] 1. data1['b'] #这里取到第2列(即b列)的值 2. data1.b #效果同1,取第2列(即b列) #这里b为列名称,但必须是连续字

CAST格式化列数据前加0

update TableName set ConsultantID=right(cast('1000000000'+CONVERT(int,ConsultantID) as varchar(10)),9) CAST格式化列数据前加0,布布扣,bubuko.com

根据一列数据 抽取另一个文件的行数据

方法一: 使用awk处理,先读入文件中的一列数据,然后在第二文件中做判断 awk -F'\t' 'FILENAME=="commUsers_Hotel"{F[$0]=1}FILENAME=="Hotel3"{if($0 in F){print}}' commUsers_Hotel Hotel3 > fugai 根据一列数据 抽取另一个文件的行数据,布布扣,bubuko.com

mysql互换表中两列数据

在开发过程中,有时由于业务等需要把一个表中的两列数据进行交换. 解决方案 使用update命令,这完全得益于MySQL SQL命令功能的强大支持. 表格中原来数据类似如下: select * from product; +----+--------+| id | name   | original_price | price  | +----+----+--------+|  1 | 雪糕   |           5.00 |   3.50 | |  2 | 鲜花   |