帆软FineReport_数据库表中插入一行内容

本文介绍如何使用FineReport进行智能填报操作,包括新建模板、添加按钮控件及设置智能填报属性等内容。
在 **帆软报表FineReport)** 中实现在 **最后一行新增记录** 是一个非常常见的需求,通常用于数据填报场景中动态添加新数据行。实现方式有多种,包括使用内置按钮、JavaScript 脚本控制、或结合参数事件等。 下面详细介绍几种主流且稳定的方法,并附上可运行的代码示例。 --- ## ✅ 方法一:使用「增加行」控件(最简单,无需代码) ### 步骤: 1. 在模板设计器中,进入「**填报页面**」设计模式。 2. 从左侧「控件」面板拖入一个 **“增加行”** 按钮。 3. 设置该按钮属性: - 增加位置:选择 `当前选中行下方` 或 `最后一条数据后` - 目标区域:选择你要增加行的数据区域(如 A1 所在的明细行) 4. 预览时点击按钮即可在最后一行后新增一条空白记录。 > ⚠️ 缺点:不够灵活,无法自定义逻辑。 --- ## ✅ 方法二:使用 JavaScript 自动获取最后一行并在其后插入(推荐) 这是你问题中最常用的方式,适用于需要通过脚本精确控制插入位置的场景。 ### 🧩 示例代码(推荐增强版) ```javascript // 获取 A 列所有可见单元格,取最后一个 var lastCell = $("td[id^='A']:visible").filter(function() { // 确保是数字结尾,比如 A1, A2... 排除 A1_0 这类扩展名干扰(如果非扩展区) return /^[A-Z]+[0-9]+$/.test($(this).attr("id")); }).last(); var lastRowID; if (lastCell.length > 0) { lastRowID = lastCell.attr("id"); // 如 "A5" } else { // 如果没有找到,则默认以 A1 为基准 lastRowID = "A1"; } // 使用 _g() 插入一行到最后一行之后 _g().appendReportRC(1, lastRowID); ``` ### 🔍 说明: - `$("td[id^='A']")`:查找 id 以 A 开头的所有单元格。 - `:visible`:排除被隐藏的行。 - `.filter(...)`:确保只匹配原始列如 `A1`, `A2`,避免与扩展单元格 `A1_0` 冲突。 - `_g().appendReportRC(1, lastRowID)`: - 第一个参数:要插入的行数 - 第二个参数:参考单元格 ID,在该单元格所在行**之后**插入 ✅ 效果:无论当前有多少行,都会在最后追加一行。 --- ## ✅ 方法三:针对「扩展单元格」结构的正确处理方式 如果你的格是通过 **A1 单元格向下扩展(纵向扩展)** 来展示多行数据(常见于数据库查询结果),那么每一行的实际 ID 是 `A1_0`, `A1_1`, `A1_2`... 此时不能用 `id^=A` 查找,而应查 `id*=A1_`。 ### 🧩 正确 JS 写法如下: ```javascript // 查找所有由 A1 扩展出来的单元格(如 A1_0, A1_1...) var cells = $("td[id*='A1_']:visible"); var lastIndex = cells.length - 1; var lastCellID = cells.eq(lastIndex).attr("id"); // 得到如 "A1_2" if (lastCellID) { _g().appendReportRC(1, lastCellID); // 在最后一行插入 } else { _g().appendReportRC(1, "A1"); // 回退到 A1 后插入 } ``` 📌 关键点: - 扩展区的真实 ID 是 `原单元格名_索引`,如 `A1_0` - 必须根据扩展主单元格名(如 `A1`)来定位 --- ## ✅ 方法四:绑定到按钮事件(完整交互流程) ### 步骤: 1. 添加一个按钮控件(文本为“新增一行”) 2. 右键 → 「添加事件」→ 「点击事件」 3. 选择「执行一段 JavaScript」 4. 粘贴以下完整代码: ```javascript FR.doHyperlinkByPost({ action: "insert", reportName: FR.cjkEncode(_g().getReportName()), // 在 A1 扩展区的最后一行插入一行 parameters: { row: function () { var cells = $("td[id*='A1_']:visible"); if (cells.length > 0) { return cells.last().parent().index(); // 获取 tr 的索引 } else { return 0; // 默认插入到第一行后 } }() }, successFunc: function () { _g().refreshView(); // 刷新视图(可选) } }); ``` > ⚠️ 注意:此方法依赖 FineReport 的内置 Hyperlink API,适合高级用户。 --- ## ✅ 方法五:设置「自动增加一行」功能(静态配置) ### 操作路径: 1. 选中数据区域的某个单元格(如 A1) 2. 属性面板 → 「其他」→ 勾选: - ✅ 允许增行 - ✅ 允许删行 - ✅ 最后一页自动增加一行空白行 👉 效果:每次加载时,如果最后没有空行,系统会自动补一行空白供用户填写。 > ✔️ 优点:零代码;✔️ 缺点:不能动态触发 --- ## ✅ 新增行后的注意事项 | 项目 | 建议 | |------|------| | **继承样式** | 在单元格属性中开启「插入行继承样式」 | | **继承控件** | 下拉框、日期选择器等需设置「继承」 | | **校验规则** | 校验范围要覆盖动态新增行 | | **主键处理** | 若为主键字段,建议设为空或使用 JS 自动生成 UUID / 自增编号 | ### 示例:新增行后自动填充序号 ```javascript // 插入完成后给新行的 B 列赋值序号 setTimeout(function () { var $lastRow = $("td[id^='A']:visible").last().closest("tr"); var index = $lastRow.index(); $lastRow.find("td[id^='B']").find("input").val(index); // 假设 B 列是序号 }, 100); ``` ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值