news 2026/6/10 2:29:06

FastReport.Net报表工具表格的使用:如何动态展示列和填充单元格——考勤报表

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
FastReport.Net报表工具表格的使用:如何动态展示列和填充单元格——考勤报表

起因是我在使用FastReport.Net工具的时候,搜不到对于我的问题的具体解决办法,所以开始写csdn来记录自己当前遇到的问题。
有关FastReport.Net的问题欢迎一起讨论。
目标:这是一个考勤报表,展示每个员工当前年月的出勤状态、天数。
要求:1.第一行展示第二行日期对应的星期几
2、根据月份动态展示列。
下面这张图是我已经画好的整个图

接下来就只需要在脚本即code里面写完整的代码。

//这个方法可以在右边属性栏找到闪电图标,会有这个事件ManualBuild,双击进去//Table2就是你给这个Table控件命的名称privatevoidTable2_ManualBuild(objectsender,EventArgse){TableObjecttable=senderasTableObject;if(table==null)return;// 1. 获取主表数据源(用于判断年月)DataSourceBasemainSource=Report.GetDataSource("V_HR_SimpleTimeSheetInfoList");// 2.获取子表数据源填充数据行DataSourceBaserowData=Report.GetDataSource("V_HR_SimpleTimeSheet");if(mainSource==null)return;// 移动到第一行获取年月(假设主表只有一条记录或取第一条)mainSource.First();intyear=Convert.ToInt32(mainSource["TSYear"]);intmonth=Convert.ToInt32(mainSource["TSMonth"]);// 2. 计算该月最大天数intmaxDays=DateTime.DaysInMonth(year,month);// 3. 定义日期列的起始索引// 假设:第2~31列对应 Day1~Day31// 请根据你的实际设计器列顺序修改这个 startColIndexintstartColIndex=2;//这个是因为我第一行需要填充的星期的开始名称为Cell169intstartWeekCellIndex=169;// 4. 循环处理 1 到 31 号for(inti=1;i<=31;i++){// 计算当前列对应的 Cell 变量名索引// 偏移量是 i-1,因为数组/索引是从 0 开始的intcurrentWeekIndex=startWeekCellIndex+(i-1);// 尝试通过反射或 FindObject 获取单元格对象// 注意:这里使用 FindObject 是最稳妥的,因为它能处理动态生成的名称stringweekCellName="Cell"+currentWeekIndex.ToString();BaseweekCell=Report.FindObject(weekCellName)asBase;// 如果找到了单元格对象if(weekCell!=null){if(i<=maxDays){// --- 情况 A: 该日期存在 (例如 6月1日 - 6月30日) ---// 1. 构造日期对象DateTimecurrentDay=newDateTime(year,month,i);// 2. 填充内容// 设置星期 (例如 "Mon", "Tue"),这里因为我要显示英文,如果不显示可以删除System.Globalization.CultureInfo.InvariantCulture((TextObject)weekCell).Text=currentDay.ToString("ddd",System.Globalization.CultureInfo.InvariantCulture);}else{((TextObject)weekCell).Text="";}}}// 5. 循环隐藏多余列// 表格通常预置了31列数据列,我们从 maxDays+1 开始隐藏for(inti=maxDays+1;i<=31;i++){// 计算当前要隐藏的列索引intcolIndex=startColIndex+(i-1);// 安全检查:防止索引越界if(colIndex<table.Columns.Count){// 核心操作:直接隐藏列// 只要 Visible = false,FastReport 就不会渲染这一列,也不会报错table.Columns[colIndex].Visible=false;}}//6. 分表头,数据行打印表格// init the data sourcerowData.Init();// print the first table row - it is a headerTable2.PrintRow(0);// each PrintRow call must be followed by either PrintColumn or PrintColumns call// to print cells on the rowTable2.PrintColumns();// print the first table row - it is a headerTable2.PrintRow(1);// each PrintRow call must be followed by either PrintColumn or PrintColumns call// to print cells on the rowTable2.PrintColumns();// now enumerate the data source and print the table bodywhile(rowData.HasMoreRows){// print the table bodyTable2.PrintRow(2);Table2.PrintColumns();// go next data source rowrowData.Next();}}

最终效果

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 2:29:06

聚乳酸-羟基乙酸共聚物-胆固醇 PLGA-CHEMS的产品使用指南

一、PLGA-CHEMS 是什么&#xff1f;PLGA-CHEMS&#xff0c;即聚乳酸-羟基乙酸共聚物-胆固醇&#xff0c;是一种两亲性嵌段共聚物。二、核心优势三、基础理化参数四、使用指南&#xff1a;制备纳米粒方法一&#xff1a;薄膜水化法&#xff08;较常用&#xff09;建议&#xff1a…

作者头像 李华
网站建设 2026/6/10 2:29:01

35岁考什么证好找工作?2026年含金量高、能帮中年破局的实用证书盘点

不知不觉&#xff0c;许多80后、90初的朋友已经走到了35岁这个被社会反复讨论的年纪。打开各大社交平台&#xff0c;关于“35岁职场危机”、“大龄转行”、“中年找工作难”的焦虑扑面而来。很多朋友在后台留言&#xff0c;或者在深夜的搜索框里敲下&#xff1a;35岁考什么证好…

作者头像 李华
网站建设 2026/6/10 2:27:50

网盘直链下载助手技术深度解析:如何优雅地突破下载限制

网盘直链下载助手技术深度解析&#xff1a;如何优雅地突破下载限制 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼…

作者头像 李华
网站建设 2026/6/10 2:26:34

什么是全景图?什么又是全景漫游?有哪些应用领域?

全景图&#xff08;英文名&#xff1a;panorama&#xff09;顾名思义&#xff0c;全景特点在于“全”。是一种宽高比为2比1的包含了360x180空间的图片。图片宽度是高度的2倍&#xff0c;因为宽度对应的是水平方向的360度&#xff0c;高度对应的是垂直方向的180度。这种全景图就…

作者头像 李华
网站建设 2026/6/10 2:22:37

开源智能激活:3分钟告别Windows和Office激活烦恼

开源智能激活&#xff1a;3分钟告别Windows和Office激活烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为系统激活弹窗而烦恼吗&#xff1f;想要找到既免费又安全的激活方案&#xff1…

作者头像 李华
网站建设 2026/6/10 2:22:23

Durable-Workflow-Temporal与Agent控制面分工

Durable Workflow Temporal 与 Agent 控制面分工 &#x1f3e0; 返回 04-README &#xff5c; ⬅️ 03-Java-Agent编排 &#xff5c; ➡️ 02-Buy领域智能体 定位&#xff1a;回答 Staff 白板 「LangGraph checkpoint 够了为什么还要 Temporal&#xff1f;」——Agent 环内状态…

作者头像 李华