当前位置: 首页 > news >正文

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

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.rkmt.cn/news/25390.html

相关文章:

  • 详细介绍:《掰开揉碎讲编程-短篇》 2025 汉化idea控制台出现乱码解决方案 看完这篇解决不了乱码也是神人了
  • 多晶硅
  • Qt 解决 ld: framework ‘AGL‘ not found
  • 2025年地坪厂家权威推荐榜:环氧地坪漆,聚氨酯地坪,固化耐磨地坪,防腐地坪,室外路面防滑地坪,运动地面,PVC塑胶地板,魔石地坪公司精选
  • 结对项目—小学四则运算题目生成器
  • 阅读笔记一:程序员的自我定位与成长基石
  • SQL 子查询与多表 JOIN 用法大全(速查版) - 实践
  • 2025年CNC高压清洗机厂家推荐排行榜:CNC全自动/数控高压清洗机、双工位/卧式清洗机、去毛刺/螺纹孔清洗机、工业/欧洲清洗机精选
  • 2025 年国内锅炉厂家最新推荐排行榜:聚焦智能控制与稳定可靠的品牌深度解析电/蒸汽/燃气/燃油/电蒸汽锅炉公司推荐
  • 2025 年食品级润滑油脂厂家最新推荐榜单:聚焦纳米材料技术突破,甄选核心竞争力突出的企业
  • 七大排序算法的基本原理 - 教程
  • LVDS硬件知识 - 指南
  • 2025 年仿石漆厂家最新推荐榜,技术实力与市场口碑深度解析,精选优质企业助力选购水包砂/冠晶石/外墙/多彩/批刮仿石漆厂家推荐
  • wsl连接 USB 设备
  • 完整教程:轻量服务器创建mysql,并配置远程连接
  • 如何系统化掌握 iOS 26 App 耗电管理,多工具协作
  • 2025 年冷库板厂家最新推荐榜:前五优质生产商盘点,含聚氨酯 / 保温 / 阻燃板企业选购指南 聚氨酯夹心板/聚氨酯保温板厂家推荐
  • 2025 年 MacBook / 苹果电脑清理应用程序最新推荐榜单:精选适配 macOS 系统的高性能系统优化工具
  • 2025 生物质颗粒机厂家推荐榜:聚焦高效环保,山东博力达机械成优选​
  • .NET驾驭Word之力:基于规则自动生成及排版Word文档
  • 2025年液压阀块厂家权威推荐榜:液压阀块加工、阀块零件机加工、液压阀加工、各种液压阀块专业制造商深度解析
  • rust如何查看和修改当前编译器版本
  • 2025 年最新推荐!国内污水处理设备优质厂家排行榜,助力企业精准选靠谱设备
  • 基于OpenGL实现三维树木生长动画的解决方案
  • 如何实现文件批量重命名后再进行批量打包下载
  • 曾国藩遗嘱 今将永别,特立四条以教汝兄弟。
  • 【IEEE出版】第五届测量控制与仪器仪表国际学术会议(MCAI 2025)
  • zedboard + AD-FMCOMMS3-EBZ AD9361 (六)gnuradio
  • CF2109D D/D/D
  • 2025 年球墨铸铁管厂家最新推荐榜:涵盖 K9/C 级供水等多规格,优质厂家选购指南 k9级球墨铸铁管/c25级球墨铸铁管/c30球墨铸铁管/c级球墨铸铁管厂家推荐