winform连接锐浪GridReport打印示例


2025-1023 新代码,更强大。
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 LRTMS.Forms { public partial class FrmDeliverPrint : DockContent { string printTemplate = ""; //主表查询SQL static string MasterSql = @"select t_ssa.ssa_name,T_HDR.bill_hdr_id,T_HDR.owner_no,T_HDR.BUSINESSBILL_NO,T_HDR.ssa_id,T_HDR.BUSINESSMAN,T_HDR.INVOICE_TIME,T_HDR.BUSINESS_ORGANIZATION, T_HDR.MANUFACTURER_ADDRESS,T_HDR.SSA_STORE_ADDR,T_HDR.RECEIVING_CLERK,T_HDR.TEL, FNC_UTL_GETFLD('PRINT_SHTXD_ZHIDR',T_HDR.OWNER_NO,'LC001') PRINT_SHTXD_ZHIDR, T_HDR.OPERATOR, T_HDR.REPORTBILL_CLERK, FNC_UTL_GETFLD('TRANSPORT_TYPE',T_HDR.TRANSPORT_TYPE,'LC001') TRANSPORT_TYPE from BILL_OUTSTOREHOUSE_HDR T_HDR join FD_SUPPLYSALESAGENCY t_ssa on T_HDR.SSA_ID=t_ssa.ssa_id where sale_type='201' "; string sql = "", billId; //根据锐浪报表中随货同行单上的字段列表,建同名的变量; string SSA_NAME, RECEIVING_CLERK, SSA_STORE_ADDR, tel, BUSINESSMAN, TRANSPORT_TYPE, INVOICE_TIME, BUSINESSBILL_NO; string PRINT_SHTXD_FUHR, PRINT_SHTXD_FAHR, INCHK_COMPLETED_TIME, MANUFACTURER_ADDRESS; string LOGISTICS_DESC, DRUG_SPEC, MARKETINGAUTHORISATIONHOLDER, MANUFACTURER_NAME, DOSAGE_FORM, APPROVAL_NO, BASEUNIT_DESC; string ACTUAL_QTY, PRICE, SETTLEUP_PRICE, AMOUNT, ACTUAL_PCS, GOODS_LOTNO, PRODUCTION_DATE, VALID_UNTIL, stock_status; DataTable dt, dtDetail; //定义Grid++Report报表主对象 GridppReport Report = new GridppReport(); public FrmDeliverPrint() { InitializeComponent(); Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(ReportInitialize); Report.FetchRecord += new _IGridppReportEvents_FetchRecordEventHandler(ReportFetchRecord); txtDate1.Text = DateTime.Now.AddDays(-1).ToString("yyyy-MM-dd"); txtDate2.Text = DateTime.Now.ToString("yyyy-MM-dd"); } void ReportInitialize() { if (dataGridView1.Rows.Count < 0) return; int i = dataGridView1.CurrentCell.RowIndex; if (i < 0) return; //两种方式,一种是从本地文件读入,另一种方式是从数据库的字段中读取。FRAME.SYS_PRINT_TEMPLATE //Report.LoadFromFile("Report\\pcd.grf");//这是一个举例,因为有下面的SQL, string templateId = cmbShtxd.SelectedValue.ToString(); ; if (string.IsNullOrEmpty(templateId)) { MessageBox.Show("请选择打印模版!"); return; } sql = "SELECT TEMPLATE_FILE FROM FRAME.SYS_PRINT_TEMPLATE T WHERE T.TEMPLATE_ID='"+ templateId+"'"; printTemplate = DBHelperOracle.ExecuteScalar(sql).ToString(); //printTemplate = printTemplate.Replace("ConnectionString='currentReport.DetailGrid.Recordset.ConnectionString'",""); Report.LoadFromStr(printTemplate); } private void tsbSearchDeliver_Click(object sender, EventArgs e) { string deliveryNo = txtDeliverNo.Text.Trim(); if (string.IsNullOrEmpty(deliveryNo)) { MessageBox.Show("请输入交货单号"); return; } Report.PrintPreview(true); } private struct MatchFieldPairType { public IGRField grField; public int MatchColumnIndex; } private void tsbClose_Click(object sender, EventArgs e) { this.Close(); } private void toolStripButton1_Click(object sender, EventArgs e) { } /// <summary> /// 将 DataTable 的数据转储到 Grid++Report 的数据集中 /// </summary> /// <param name="Report">报表对象</param> /// <param name="dt">DataTable对象</param> public void FillRecordToReport(IGridppReport Report, DataTable dt) { MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)]; //根据字段名称与列名称进行匹配,建立DataReader字段与Grid++Report记录集的字段之间的对应关系 int MatchFieldCount = 0; var st = Report.DetailGrid.Recordset.Fields; string sttype = ""; for (int i = 0; i < dt.Columns.Count; ++i) { foreach (IGRField fld in Report.DetailGrid.Recordset.Fields) { if (i == 0) { sttype += fld.Name; sttype += ";"; } 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(); } } //在C#中一次填入一条记录不能成功,只能使用一次将记录全部填充完的方式 private void ReportFetchRecord() { if (dtDetail.Rows.Count == 0) return; FillRecordToReport(Report, dtDetail); } private void tsmFilter_Click(object sender, EventArgs e) { } //主表点击事件,根据主表的TASK_ID,显示子表的数据 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) { if (e.RowIndex < 0) return; billId = dataGridView1.Rows[e.RowIndex].Cells["bill_hdr_id"].Value.ToString(); sql = @"select T_DTL.LOGISTICS_DESC,T_DTL.DRUG_SPEC,T_DTL.APPROVAL_NO,T_DTL.ACTUAL_QTY,T_DTL.ACTUAL_PCS,T_DTL.PRICE,T_DTL.AMOUNT,T_DTL.GOODS_LOTNO,T_DTL. PRODUCTION_DATE_CHAR,T_DTL.VALID_UNTIL_CHAR,T_DTL. ZZMEDERE,T_DTL.ZZYYZCH,T_DTL.MARKETINGAUTHORISATIONHOLDER,T_DTL.MANUFACTURER_NAME,T_DTL.BILL_DTL_ID,T_DTL.DOSAGE_FORM,T_DTL.BASEUNIT_DESC,T_DTL.bill_hdr_id,T_G.GOODS_GROUP, T_G.MANUFACTURER_LICENSE MANUFACTURER_LICENSE_1,SETTLEUP_PRICE, REPLACE(decode(substr(T_G.goods_group,1,4),'2001',SUBSTR(PRODUCTION_DATE_CHAR,1,7),'2011',SUBSTR(PRODUCTION_DATE_CHAR,1,7),PRODUCTION_DATE_CHAR),'-','.') PRODUCTION_DATE, REPLACE(decode(substr(T_G.goods_group,1,4),'2001',SUBSTR(VALID_UNTIL_CHAR,1,7),'2011',SUBSTR(VALID_UNTIL_CHAR,1,7),VALID_UNTIL_CHAR),'-','.') VALID_UNTIL, case when T_DTL.STOCK_STATUS='1' then '合格' else '未知' end STOCK_STATUS,PRODUCT_CODE from BILL_OUTSTOREHOUSE_dtl T_DTL , FD_GOODS T_G where T_DTL.GOODS_ID = T_G.GOODS_ID AND bill_hdr_id='" + billId + "'"; sql = string.Format(sql, billId); dtDetail = DBHelperOracle.GetTable(sql); dataGridView2.DataSource = dtDetail; } void getPrintData(int rowIndex) { billId = dataGridView1.Rows[rowIndex].Cells["bill_hdr_id"].Value.ToString(); SSA_NAME = dataGridView1.Rows[rowIndex].Cells["SSA_NAME"].Value.ToString(); RECEIVING_CLERK = dataGridView1.Rows[rowIndex].Cells["RECEIVING_CLERK"].Value.ToString(); SSA_STORE_ADDR = dataGridView1.Rows[rowIndex].Cells["SSA_STORE_ADDR"].Value.ToString(); tel = dataGridView1.Rows[rowIndex].Cells["tel"].Value.ToString(); BUSINESSMAN = dataGridView1.Rows[rowIndex].Cells["BUSINESSMAN"].Value.ToString(); INVOICE_TIME = dataGridView1.Rows[rowIndex].Cells["INVOICE_TIME"].Value.ToString(); TRANSPORT_TYPE = dataGridView1.Rows[rowIndex].Cells["TRANSPORT_TYPE"].Value.ToString(); BUSINESSBILL_NO = dataGridView1.Rows[rowIndex].Cells["BUSINESSBILL_NO"].Value.ToString(); dtDetail.Columns.Add("SSA_NAME", typeof(string)); dtDetail.Columns.Add("RECEIVING_CLERK", typeof(string)); dtDetail.Columns.Add("SSA_STORE_ADDR", typeof(string)); dtDetail.Columns.Add("tel", typeof(string)); dtDetail.Columns.Add("BUSINESSMAN", typeof(string)); dtDetail.Columns.Add("INVOICE_TIME", typeof(string)); dtDetail.Columns.Add("TRANSPORT_TYPE", typeof(string)); dtDetail.Columns.Add("BUSINESSBILL_NO", typeof(string)); dtDetail.Columns.Add("PRINT_SHTXD_FAHR", typeof(string)); dtDetail.Columns.Add("PRINT_SHTXD_FUHR", typeof(string)); dtDetail.Columns.Add("MANUFACTURER_ADDRESS", typeof(string)); dtDetail.Columns.Add("INCHK_COMPLETED_TIME", typeof(string)); dtDetail.Columns.Add("PRINT_TIMES", typeof(string)); //dtDetail.Columns.Add("INCHK_COMPLETED_TIME", typeof(string)); PRINT_SHTXD_FUHR = cmbCheckMan.Text.Trim(); PRINT_SHTXD_FAHR = cmbDeliverMan.Text.Trim(); MANUFACTURER_ADDRESS = cmbAddress.Text.Trim(); INCHK_COMPLETED_TIME = dateTimePicker1.Text; foreach (DataRow row in dtDetail.Rows) { row["SSA_NAME"] = SSA_NAME; row["RECEIVING_CLERK"] = RECEIVING_CLERK; row["BUSINESSBILL_NO"] = BUSINESSBILL_NO; row["SSA_STORE_ADDR"] = SSA_STORE_ADDR; row["tel"] = tel; row["BUSINESSMAN"] = BUSINESSMAN; row["INVOICE_TIME"] = INVOICE_TIME; row["TRANSPORT_TYPE"] = TRANSPORT_TYPE; row["PRINT_SHTXD_FAHR"] = PRINT_SHTXD_FAHR; row["PRINT_SHTXD_FUHR"] = PRINT_SHTXD_FUHR; row["MANUFACTURER_ADDRESS"] = MANUFACTURER_ADDRESS; row["INCHK_COMPLETED_TIME"] = INCHK_COMPLETED_TIME; row["PRINT_TIMES"] = "1"; row["INCHK_COMPLETED_TIME"] = INCHK_COMPLETED_TIME; } dataGridView2.DataSource = dtDetail; } //打印按钮 private void tsbPrint_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(cmbAddress.Text.Trim())) { MessageBox.Show("发货地址不能为空!"); return; } if (string.IsNullOrEmpty(cmbDeliverMan.Text.Trim())) { MessageBox.Show("发货员不能为空!"); return; } if (string.IsNullOrEmpty(cmbCheckMan.Text.Trim())) { MessageBox.Show("复核员不能为空!"); return; } //最最重要的一句代码,Report.FetchRecord int i = dataGridView1.CurrentRow.Index; if (i <= 0) return; getPrintData(i); Report.PrintPreview(true); } private void FrmDeliverPrint_Load(object sender, EventArgs e) { sql = MasterSql + " and INVOICE_TIME BETWEEN to_date('{0}', 'yyyy-MM-dd') and to_date('{1}','yyyy-MM-dd') "; sql = string.Format(sql, txtDate1.Text,txtDate2.Text); dt = DBHelperOracle.GetTable(sql); dataGridView1.DataSource = dt; sql = "SELECT TEMPLATE_ID,TEMPLATE_DESCRIPTION FROM FRAME.SYS_PRINT_TEMPLATE T where template_id like 'shtxd%'"; cmbShtxd.DataSource = DBHelperOracle.GetTable(sql); cmbShtxd.DisplayMember = "TEMPLATE_DESCRIPTION"; cmbShtxd.ValueMember = "TEMPLATE_ID"; } /* * /2025-7-24器械类型的单独打印模板 shtxd_ylpsqx if("@vcpz@"=="20" && "@vtweg: == “3l” ) * 其它31 渠道的 shtxd_lryy3l" * 633移动类型的寄售出库单模板shtxd_lryy633 * 2025-8-28 季托生产的品种订单单独打 shtxd_lrsw_dg" * //冷藏品交接单 llypjjd * */ } }
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 LRTMS.Forms
{
public partial class FrmDeliverPrint : DockContent
{
string sql = "";
string taskId="0", taskNo, carNo, driverName, superCargoName, Taskdate;
DataTable dt,dtDetail;
//定义Grid++Report报表主对象
GridppReport Report = new GridppReport();
public FrmDeliverPrint()
{
InitializeComponent();
Report.Initialize += new _IGridppReportEvents_InitializeEventHandler(ReportInitialize);
}
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;//主报表传参
Report.DetailGrid.Recordset.ConnectionString = "Provider=OraOLEDB.Oracle;" + CommFunc.GetConnString();
Report.DetailGrid.Recordset.QuerySQL = "select * from lrtms_task_dtl where task_id=" + taskId;
}
private void DefineReport()
{
int Selected = 0;
Report.Clear();
Report.Printer.PaperOrientation = GRPaperOrientation.grpoLandscape;
//<<定义报表头
IGRReportHeader Reportheader = Report.InsertReportHeader();
Reportheader.Height = 1.38;
//插入一个静态文本框,显示报表标题文字
IGRStaticBox StaticBox = Reportheader.Controls.Add(GRControlType.grctStaticBox).AsStaticBox;
if (Selected == 0)
StaticBox.Text = "客户清单打印";
else
StaticBox.Text = "产品清单打印";
StaticBox.Center = GRCenterStyle.grcsHorizontal; //使部件框在节中水平方向上居中对齐
StaticBox.Font.Point = 15;
StaticBox.Font.Bold = true;
StaticBox.Top = 0.40;
StaticBox.Width = 5.64;
StaticBox.Height = 0.58;
//>>定义报表头
//<<根据DataGridView的列信息定义明细网格
Report.InsertDetailGrid();
Report.DetailGrid.ColumnTitle.Height = 0.58;
Report.DetailGrid.ColumnContent.Height = 0.58;
IGRRecordset RecordSet = Report.DetailGrid.Recordset;
for (int i = 0; i < dataGridView1.ColumnCount; ++i)
{
string ColumnName = dataGridView1.Columns[i].Name;
RecordSet.AddField(ColumnName, GRFieldType.grftString);
double ReportColumnWidth = Convert.ToDouble(dataGridView1.Columns[i].Width) / 50;
Report.DetailGrid.AddColumn(ColumnName, dataGridView1.Columns[i].HeaderText, ColumnName, ReportColumnWidth);
}
}
private void tsbSearchDeliver_Click(object sender, EventArgs e)
{
string deliveryNo = txtDeliverNo.Text.Trim();
if (string.IsNullOrEmpty(deliveryNo))
{
MessageBox.Show("请输入交货单号");
return;
}
Report.PrintPreview(true);
}
private struct MatchFieldPairType
{
public IGRField grField;
public int MatchColumnIndex;
}
private void tsbClose_Click(object sender, EventArgs e)
{
this.Close();
}
/// <summary>
/// 将 DataTable 的数据转储到 Grid++Report 的数据集中
/// </summary>
/// <param name="Report">报表对象</param>
/// <param name="dt">DataTable对象</param>
public void FillRecordToReport(IGridppReport Report, DataTable dt)
{
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();
}
}
void dt_FetchREcord()
{
FillRecordToReport(Report, dtDetail);
}
private void tsmFilter_Click(object sender, EventArgs e)
{
}
//主表点击事件,根据主表的TASK_ID,显示子表的数据
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 lrtms_task_dtl where task_id=" + taskId);
dataGridView2.DataSource = dtDetail;
}
//打印按钮
private void tsbPrint_Click(object sender, EventArgs e)
{
//最最重要的一句代码,Report.FetchRecord
// Report.FetchRecord += dt_FetchREcord;
Report.PrintPreview(true);
}
private void FrmDeliverPrint_Load(object sender, EventArgs e)
{
sql = "select * from lrtms_task_hdr";
dt = DBHelperOracle.GetTable(sql);
dataGridView1.DataSource = dt;
}
}
}
活到老,学到老。

浙公网安备 33010602011771号