当前位置: 移动技术网 > IT编程>开发语言>.net > gridcontrol 根据某一列数据来控制其他列合并

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

2019年01月19日  | 移动技术网IT编程  | 我要评论
首先需要属性栏中设置这一列可以合并,再在CellMerge方法中写 目的是根据三级标题这一列如果有连续相同的数据,就合并题目列、分值列,并且把合并的那几行内容都显示出来而不是只显示合并的第一行。 cellmerge函数中if(valueFirstColumn1 == valueFirstColumn ...

首先需要属性栏中设置这一列可以合并,再在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);
            }
        }

 

如您对本文有疑问或者有任何想说的,请 点击进行留言回复,万千网友为您解惑!

相关文章:

验证码:
移动技术网