Winform开发报表(锐浪推方式)

news/2025/10/20 16:54:27/文章来源:https://www.cnblogs.com/lrzy/p/19153069

Grid++Report 的报表数据来源既可以是推(PUSH)模式,也可以是拉(PULL)模式。所谓推模式就是由报表宿主程序向报表填充数据,报表引擎处于被动接受数据的形式。所谓拉模式就是报表引擎根据报表的数据源取数参数主动从数据源提取数据。

Grid++Report 的拉模式采用 OLE DB 数据引擎,OLE DB 是 Windows 系统提供的具有广泛数据访问能力的最新一代数据引擎。只要指定数据源的连接参数与查询SQL语句,就可以从各种数据源中提取数据。

Grid++Report 的推模式通过报表事件向报表宿主程序发出请求报表数据的通知,由报表宿主程序在此事件中将数据填入到报表的记录集中。采用推模式,可以将一切宿主程序能得到的数据提供给报表,这样更进一步扩大报表数据的来源。如果数据需要在程序中重新整理与加工运算,就必须采用推模式。

例子 Normal 中的报表都是采用拉模式获取报表数据。例子 ManualFillRecord 演示了推模式提供报表数据,同时也说明了在推模式下,任何数据都可以提供给 Grid++Report。

using System;
using System.Collections.Generic;
using grproLib;
using LRTMS.Common;
using LRTMS.DB;
using LRTMS.Report;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using WeifenLuo.WinFormsUI.Docking;namespace sdd Forms
{public partial class FrmTestPrint : DockContent{string sql = "";string taskId = "0", taskNo, carNo, driverName, superCargoName, Taskdate;DataTable dt, dtDetail;//定义Grid++Report报表主对象GridppReport Report = new GridppReport();public FrmTestPrint(){InitializeComponent();Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(ReportInitialize);Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord);}private void tsbPrint_Click(object sender, EventArgs e){//最最重要的一句代码,Report.FetchRecord,一定要写在程序的初始事件中;Report.PrintPreview(true);}private void dataGridView2_CellClick(object sender, DataGridViewCellEventArgs e){}//在C#中一次填入一条记录不能成功,只能使用一次将记录全部填充完的方式private void ReportFetchRecord(){if (dtDetail.Rows.Count == 0) return;FillRecordToReport(Report, dtDetail);}private void FrmTestPrint_Load(object sender, EventArgs e){sql = "select * from wewe";dt = DBHelperOracle.GetTable(sql);dataGridView1.DataSource = dt;}//定义保存报表记录集的结构private struct MatchFieldPairType{public IGRField grField;public int MatchColumnIndex;}/// <summary>/// 将 DataTable 的数据转储到 Grid++Report 的数据集中/// </summary>/// <param name="Report">报表对象</param>/// <param name="dt">DataTable对象</param>public void FillRecordToReport(IGridppReport Report, DataTable dt){if (dtDetail.Rows.Count == 0) return;MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)];//根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系int MatchFieldCount = 0;for (int i = 0; i < dt.Columns.Count; ++i){foreach (IGRField fld in Report.DetailGrid.Recordset.Fields){if (string.Compare(fld.Name, dt.Columns[i].ColumnName, true) == 0){MatchFieldPairs[MatchFieldCount].grField = fld;MatchFieldPairs[MatchFieldCount].MatchColumnIndex = i;++MatchFieldCount;break;}}}// 将 DataTable 中的每一条记录转储到 Grid++Report 的数据集中去foreach (DataRow dr in dt.Rows){Report.DetailGrid.Recordset.Append();for (int i = 0; i < MatchFieldCount; ++i){var columnIndex = MatchFieldPairs[i].MatchColumnIndex;if (!dr.IsNull(columnIndex)){MatchFieldPairs[i].grField.Value = dr[columnIndex];}}Report.DetailGrid.Recordset.Post();}}private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e){if (e.RowIndex < 0) return;string taskId = dataGridView1.Rows[e.RowIndex].Cells["task_id"].Value.ToString();dtDetail = DBHelperOracle.GetTable("select * from wewg where task_id=" + taskId);dataGridView2.DataSource = dtDetail;}//报表初始化void ReportInitialize(){if (dataGridView1.Rows.Count < 0) return;int i = dataGridView1.CurrentCell.RowIndex;if (i < 0) return;taskNo = dataGridView1.Rows[i].Cells["TASK_BILL_NO"].Value.ToString();carNo = dataGridView1.Rows[i].Cells["car_number"].Value.ToString();driverName = dataGridView1.Rows[i].Cells["driver_name"].Value.ToString();Taskdate = dataGridView1.Rows[i].Cells["create_time"].Value.ToString();superCargoName = dataGridView1.Rows[i].Cells["SUPERCARGO_NAME"].Value.ToString();taskId = dataGridView1.Rows[i].Cells["task_id"].Value.ToString();Report.LoadFromFile("Report\\pcd.grf");Report.ParameterByName("task_no").AsString = taskNo;//主报表传参Report.ParameterByName("car_no").AsString = carNo;//主报表传参Report.ParameterByName("driver_name").AsString = driverName;//主报表传参Report.ParameterByName("supercargo").AsString = superCargoName;//主报表传参Report.ParameterByName("bill_date").AsString = Taskdate;//主报表传参
        }}
}

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/941363.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025年通风天窗厂家最新权威推荐榜:排烟天窗、通风气楼、屋顶通风器、顺坡气楼、10A通风天窗、1型通风天窗、TC5A通风天窗、TC12B通风天窗、屋脊通风天窗专业选购指南

2025年通风天窗厂家最新权威推荐榜:排烟天窗、通风气楼、屋顶通风器、顺坡气楼、10A通风天窗、1型通风天窗、TC5A通风天窗、TC12B通风天窗、屋脊通风天窗专业选购指南 随着工业建筑环境标准的不断提升,通风天窗作为工…

【LeetCode】125. 验证回文串

125. 验证回文串 如果在将所有大写字符转换为小写字符、并移除所有非字母数字字符之后,短语正着读和反着读都一样。则可以认为该短语是一个 回文串 。 字母和数字都属于字母数字字符。 给你一个字符串 s,如果它是 回…

Toposort

拓扑排序 今天2025.10.16经过 \(hwh\) 和 \(cxy\) 的指导,我也是初步学会了 \(markdown\),必须得写一篇文章练练手。写得格式可能不太好,没逝,一定会好起来的好了,开始说说今天学的东西—— 拓扑排序 事实上我早就…

2025年冲压件厂家权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头企业深度解析

2025年冲压件厂家权威推荐榜:新能源/光伏/精密/异形/五金/铝/汽配/不锈钢/家具冲压件源头企业深度解析 一、行业背景与发展趋势 随着制造业的转型升级,冲压件行业正迎来新一轮技术变革。在新能源、光伏、汽车、家电等…

AI 产品测试企业内训 | 两天构建企业级智能体测试能力

关注 霍格沃兹测试学院公众号,回复「资料」, 领取人工智能测试开发技术合集 AI 产品和智能体的快速迭代,给企业测试团队带来了新的挑战: 智能体问答错误率高、插件调用效果不可控 语音识别、文本理解、视觉分析准确…

详细介绍:《掰开揉碎讲编程-短篇》 2025 汉化idea控制台出现乱码解决方案 看完这篇解决不了乱码也是神人了

详细介绍:《掰开揉碎讲编程-短篇》 2025 汉化idea控制台出现乱码解决方案 看完这篇解决不了乱码也是神人了pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display…

探索无限可能:生成式推荐的演进、前沿与挑战【AI业务应用方向】

TL;DR 过去一年间,生成式推荐取得了长足的实质性进展,特别是在凭借大型语言模型强大的序列建模与推理能力提升整体推荐性能方面。基于LLM(Large Language Models, LLMs)的生成式推荐(Generative Recommendations,…

【隐语SecretFlow架构解读】隐私保护模型在线推理系统 SecretFlow-Serving 架构解读

打开链接点亮社区Star,照亮技术的前进之路。每一个点赞,都是社区技术大佬前进的动力Github 地址: https://github.com/secretflow 在传统机器学习场景中,完成模型训练得到模型之后,如何将模型的推理能力应用到实际…

2025年储罐厂家权威推荐榜:钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐

2025年储罐厂家权威推荐榜:钢衬塑储罐,钢塑复合储罐,化工储罐,防腐储罐,PE储罐,盐酸储罐,硫酸储罐,聚丙烯储罐,不锈钢储罐,次氯酸钠储罐 在现代化工、制药、环保等工业领域,储罐作为关键的基础设施,其性能…

多晶硅

等待49700一线 企稳多单

2025 最新推荐!溴化锂回收公司精选榜单:制冷机 / 溶液 / 机组回收服务商权威测评及选择指南

引言 伴随 “双碳” 目标推进与溴化锂制冷设备迭代加速,2025 年国内废旧溴化锂机组、溶液回收需求同比增长 20%,但市场仍存在服务标准混乱、环保合规性参差不齐等问题。部分机构缺乏专业拆解技术,导致铜铝资源回收率…

Qt 解决 ld: framework ‘AGL‘ not found

现象 硬件环境非最新 macOS Tahoe 26 系统 XCode 已经更新到 26 版本$ xcodebuild -version Xcode 26.0.1 Build version 17A400Qt 5.15.2执行 qmake 时出现以下链接错误 ld: framework AGL not found clang++: error:…

技术指标分享--单趋势通道

在技术分析中,均线系统一直是最重要的趋势工具之一。这里分享一个趋势通道的指标就是以 55日指数移动平均线(EMA) 为核心,通过构造“多头线、空头线”两条均线通道,直观地反映市场的长线趋势与多空格局。一、指标…

2025年地坪厂家权威推荐榜:环氧地坪漆,聚氨酯地坪,固化耐磨地坪,防腐地坪,室外路面防滑地坪,运动地面,PVC塑胶地板,魔石地坪公司精选

2025年地坪厂家权威推荐榜:环氧地坪漆,聚氨酯地坪,固化耐磨地坪,防腐地坪,室外路面防滑地坪,运动地面,PVC塑胶地板,魔石地坪公司精选 行业背景与发展趋势 随着现代工业化和城市化进程的加速推进,地坪行业作为…

微算法科技(MLGO)研发突破性低复杂度CFG算法,成功缓解边缘分裂学习中的掉队者问题

在分布式机器学习逐步走向应用化、产品化的当下,边缘计算与隐私保护成为支撑智能化发展的两大支柱。在这一背景下,一家领先的智能算法研究企业微算法科技宣布成功开发出一项重要创新技术:一种用于无线网络中分裂学习…

大语言模型的微调策略

大语言模型的微调策略尽管大语言模型展示出强大的能力,但在特定任务领域,它们往往无法达到最佳效果。通过微调,可以将特定领域的数据集输入模型中,使模型学习该领域的知识,从而优化自身在特定领域的 NLP 任务中的…

结对项目—小学四则运算题目生成器

项目成员 汪雨嫣3223003305、沙吉旦乃吉米丁3223004775GitHub地址 https://github.com/wyy517/WYY517/tree/main/math这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience这个作…

阅读笔记一:程序员的自我定位与成长基石

《程序员修炼之道:从小工到专家》开篇便打破了“程序员只是代码编写者”的刻板认知,将职业素养置于核心位置,为技术从业者指明了从“小工”到“专家”的底层逻辑。在数字化浪潮席卷全球的今天,软件已深度融入社会运…

SQL 子查询与多表 JOIN 用法大全(速查版) - 实践

SQL 子查询与多表 JOIN 用法大全(速查版) - 实践pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas"…

Excel学习指南

感觉太简单,就边练习边笔记了,根据微信读书的《Excel函数与公式速查手册》来练习,不区分大小写 名称的定义与使用 “名称”就是给一个单元格、单元格区域、公式或常量值起一个易于理解和记忆的别名。 如果引用的数据…