FlexCell表格控件有很多亮点的功能,使用也算比较方便,很多时候,可以模拟传统的Excel内容在Winform界面上展现,而且也支持内容格式的预设置等,本文主要介绍利用这个控件来实现一些特殊的统计及关联信息显示的功能。在实际项目中,有一个这样的需求,首先需要显示一些数据的总的汇总数据,每条又可以进一步查看其对应的明细数据,类似于数据仓库的钻取功能,那么我们要如何实现以上的功能呢?

1、报表统计功能介绍

功能介绍如下图所示。

单击链接可以进一步展现相关的人员列表,如下图所示。

2、功能实现思路分析

实现以上功能,如果利用.NET自带的DataGridView,通过在在Cell里面添加链接控件的方式,估计也能实现,不过可能操作起来会比较麻烦一些。

本文主要介绍利用FlexCell 表格控件实现以上操作的思路,共大家参考,并非为该控件做广告。

首先我们需要在为每个条件显示一行记录,对应还要记住它的条件,其中有一个超链接的单元格,供我们单击可以查看明细。为了记住该行的条件,我其实在一个隐藏列里面放置了条件表达式,真实情况下如下所示,只是为了显示美观,不需要显示隐藏的条件内容。

FlexCell提供超链接的单元格类型,设置为超链接类型的单元格,内容会加下划线,而且可以对超链接的事件进行捕捉处理。

得到了响应的处理事件,以及存放了对应的条件描述,那么在事件里,打开一个新窗体,根据条件内容获取对应的列表显示出来即可。

3、功能实现代码

1)绑定相关的汇总数据

 Dictionary<string, CListItem> dict = GetAgeCondition();if (dict.Keys.Count > 0){grid1.Cell(startRow++, 1).Text = "年龄段情况:";foreach (string key in dict.Keys){CListItem item = dict[key];grid1.Cell(startRow, 2).Text = key;grid1.Cell(startRow, 3).Text = string.Format("有{0}人,占比例{1} ", item.Text, item.Value);grid1.Cell(startRow, 4).Text = string.Format("Age:{0}", key);startRow++;}} 

2)超链接处理事件代码

在控件上单击Grid的Hyperlink处理事件,然后实现其内部处理代码,如下所示。

        private void grid1_HyperLinkClick(object Sender, FlexCell.Grid.HyperLinkClickEventArgs e){FlexCell.Cell cell = grid1.Cell(e.Row, 4);if (cell != null && !string.IsNullOrEmpty(cell.Text)){FrmStatisticDetail dlg = new FrmStatisticDetail();dlg.KeyCondition = cell.Text;dlg.ShowDialog();}e.URL = "";e.Changed = true;}

3)明细窗体处理代码

       private void DealAge(string condition, ref int startRow){grid1.Cell(1, 1).Text += string.Format("(条件:年龄{0})", condition);startRow++;// 设置单元格文字grid1.Cell(startRow, 1).Text = "年龄";grid1.Cell(startRow, 2).Text = "编号";grid1.Cell(startRow, 3).Text = "姓名";grid1.Cell(startRow, 4).Text = "性别";grid1.Cell(startRow, 5).Text = "生日";grid1.Cell(startRow, 6).Text = "职别";grid1.Cell(startRow, 7).Text = "部别";grid1.Range(startRow, 1, startRow, 7).BackColor = Color.Yellow;int start = startRow++;string where = "Age " + condition; if(condition.Contains("~")){string[] conArray = condition.Split('~');where = string.Format("Age >={0} and Age<={1}", conArray[0], conArray[1]);}DataTable dt = BLLFactory<Pilot>.Instance.FindByView("PilotAgeView", where, "Age", true);foreach (DataRow row in dt.Rows){grid1.Cell(startRow, 1).Text = row["Age"].ToString();grid1.Cell(startRow, 2).Text = row["PilotNo"].ToString();grid1.Cell(startRow, 3).Text = row["Name"].ToString();grid1.Cell(startRow, 4).Text = row["Sex"].ToString();DateTime birthday;if (DateTime.TryParse(row["Birthday"].ToString(), out birthday)){grid1.Cell(startRow, 5).Text = birthday.ToString("yyyy-MM-dd");}grid1.Cell(startRow, 6).Text = row["OfficialRank"].ToString();grid1.Cell(startRow, 7).Text = row["DeptCode"].ToString();startRow++;}FlexCell.Range range = grid1.Range(start, 1, startRow, 7);range.set_Borders(FlexCell.EdgeEnum.Outside | FlexCell.EdgeEnum.Inside, FlexCell.LineStyleEnum.Thin);startRow++;startRow++;}

上面的代码,主要就是动态绘制表头,设置格式,然后绘制表格明细的单元格内容即可。

4)实现打印、导出Excel/PDF等功能

控件内置了很多导出功能,实现基本的导出、打印功能,非常方便,代码如下。

       private void menu_Preview_Click(object sender, EventArgs e){try{grid1.PrintPreview();}catch (Exception err){MessageDxUtil.ShowError(err.Message);}}private void menu_PageSetting_Click(object sender, EventArgs e){try{grid1.ShowPageSetupDialog();}catch (Exception err){MessageDxUtil.ShowError(err.Message);}}private void menu_ExportExcel_Click(object sender, EventArgs e){try{#region 保存Excel文件SpecialDirectories sp = new SpecialDirectories();SaveFileDialog dialog = new SaveFileDialog();dialog.Filter = "Excel(*.xls)|*.xls|All File(*.*)|*.*";dialog.Title = "保存Excel";try{dialog.InitialDirectory = sp.Desktop;}catch{dialog.InitialDirectory = "C:\\";}dialog.RestoreDirectory = true;if (dialog.ShowDialog() == DialogResult.OK){string fileToSave = dialog.FileName;if (string.IsNullOrEmpty(fileToSave)){return;}bool success = grid1.ExportToExcel(fileToSave, true, true);if (success){Process.Start(fileToSave);}}#endregion}catch (Exception err){MessageDxUtil.ShowError(err.Message);}}/// <summary>/// 导出Excel文件/// </summary>/// <param name="fileToSave">文件路径</param>/// <returns></returns>public bool ExportExcel(string fileToSave){bool success = grid1.ExportToExcel(fileToSave, true, true);return success;}private void menu_ExportPDF_Click(object sender, EventArgs e){try{grid1.PageSetup.DocumentName = "统计报表";bool success = grid1.ExportToPDF("");}catch (Exception err){MessageDxUtil.ShowError(err.Message);}}

利用FlexCell实现的一些报表统计应用相关推荐

  1. flexcell绑定MySQL数据_利用FlexCell实现的一些报表统计应用

    FlexCell表格控件有很多亮点的功能,使用也算比较方便,很多时候,可以模拟传统的Excel内容在Winform界面上展现,而且也支持内容格式的预设置等,本文主要介绍利用这个控件来实现一些特殊的统计 ...

  2. 利用Project进行工时等的报表统计

    利用Project制定报表不但很方便,而且有很强大的报表统计功能.主要的方法是: Project中自带了开始时间.完成时间.实际开始时间.实际完成时间等字段,但在实际填写进度时,当修改了实际完成时间时 ...

  3. 报表统计-mysql存储过程

    首先mysql如何创建一个存储过程: 1.创建一个日常考核的存储过程: drop procedure if exists pr_dailycheck; 首先判断是否存在同名的存储过程,如果存在同名的存 ...

  4. 报表统计财务计算是计算机在哪个方面的应用,统计和会计有什么区别

    4 会计和统计有什么关系 会计和统计相互协调的必要性 随着市场经济的深入以及现代企业制度的建立,特别是资本市场中证券市场的建立,企业之间的竞争日益激烈.为提高竞争力和经济效益,企业必须更加注重市场信息 ...

  5. [ZJOI2007]棋盘制作 报表统计 矩阵游戏 时态同步

    好长时间了..简要除草. 棋盘制作:经典dp... 报表统计:明显数据结构,,,但我没想出来,第一问可以用堆,第二问用平衡树. 矩阵游戏:好吧.一眼二分图,匈牙利过. 时态同步:树形dp,貌似不难,( ...

  6. 利用XML实现通用WEB报表打印(转载)

    原文地址: http://www.microsoft.com/china/community/Column/65.mspx 利用XML实现通用WEB报表打印 卢彦 方案适用性 . 1. 远程数据打印. ...

  7. bzoj 1058: [ZJOI2007]报表统计 (Treap)

    链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1058 题面; 1058: [ZJOI2007]报表统计 Time Limit: 15 Sec ...

  8. 利用XML实现通用WEB报表打印 卢彦

    利用XML实现通用WEB报表打印(1) 卢彦 摘要 开发B/S结构的应用程序最头疼的问题可能就是报表打印了,由于只能采用浏览器来作为用户界面进行交互,所以不能精确控制客户端的打印机.而很多B/S结构的 ...

  9. Oracle分析函数、多维函数和Model函数简要说明,主要针对BI报表统计

    以下代码均经过测试,可直接运行 Oracle分析函数.多维函数和Model函数简要说明,主要针对BI报表统计,不一定很全面,但对BI应用场景做了少许说明 --创建一张销售数量表,数据趋势是递增的 CR ...

最新文章

  1. mongodb3.0的权限认证问题
  2. UVa 412 - Pi
  3. [云炬创业基础笔记]第二章创业者测试4
  4. Mysql 插入中文错误:Incorrect string value: '...' for column 'xx' at row 1
  5. android imageview 图片切换动画,在Android中以动画方式将ImageView移动到不同的位置...
  6. SpringCloud微服务:Eureka组件之服务注册与发现
  7. LeCun:深度学习在信号理解中的强大和局限(视频+PPT)
  8. java方法被编译器调用_我异常了,快来捕获我,Java异常简述
  9. inotify java maven_Maven
  10. “FreeTextBox”控件使用——Word编辑器
  11. 【单片机】简单的时钟代码
  12. Windows下安装神通数据库
  13. aspectjweaver和aspectjrt的作用?(作用、说明、案例)
  14. ubuntu 18.04 设置静态IP地址
  15. 动易2006CMSSP3+动网论坛 DVBBS 7.1 SP1+Oblog 3.13绿色整合版
  16. 【参赛作品23】华为OpenGauss数据库安装与使用
  17. 峰值速率、系统容量、吞吐量、带宽之间的区别
  18. 自负是自卑的一种心理表征
  19. 五一劳动节,微信公众号图文应该怎样排版?
  20. Jan Jürjens-基于模型的安全性系统-UMLChina讲座-音频和幻灯

热门文章

  1. ChatGPT国内怎么用?官网实在太麻烦了,ChatGPT可以直接国内使用吗?
  2. 人脸表情识别和情绪分类 | Python+TensorFlow(框架)+Keras+PyQt5
  3. unik的命令行-解释说明
  4. STM32脱机烧录器源文件、离线烧录器 制作资料 源文件
  5. java怎么捕捉游戏窗口_捕捉桌面上的窗口信息
  6. <<视觉问答>>2022:CLIP Models are Few-shot Learners: Empirical Studies on VQA and Visual Entailment
  7. windows本地git关联远程gitlab仓库
  8. Mapper 接口的如何起作用
  9. 浏览器使用:chrome谷歌浏览器网页截图capture+火狐浏览器的历史在哪?
  10. 2021年美容师(中级)考试资料及美容师(中级)新版试题