winform連接銳浪GridReport打印示例


2025-1023 新代碼,更強(qiáng)大。
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 = ""; //主表查詢(xún)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; //根據(jù)銳浪報(bào)表中隨貨同行單上的字段列表,建同名的變量; 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報(bào)表主對(duì)象 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; //兩種方式,一種是從本地文件讀入,另一種方式是從數(shù)據(jù)庫(kù)的字段中讀取。FRAME.SYS_PRINT_TEMPLATE //Report.LoadFromFile("Report\\pcd.grf");//這是一個(gè)舉例,因?yàn)橛邢旅娴腟QL, string templateId = cmbShtxd.SelectedValue.ToString(); ; if (string.IsNullOrEmpty(templateId)) { MessageBox.Show("請(qǐng)選擇打印模版!"); 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("請(qǐng)輸入交貨單號(hào)"); 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 的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到 Grid++Report 的數(shù)據(jù)集中 /// </summary> /// <param name="Report">報(bào)表對(duì)象</param> /// <param name="dt">DataTable對(duì)象</param> public void FillRecordToReport(IGridppReport Report, DataTable dt) { MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)]; //根據(jù)字段名稱(chēng)與列名稱(chēng)進(jìn)行匹配,建立DataReader字段與Grid++Report記錄集的字段之間的對(duì)應(yīng)關(guān)系 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 中的每一條記錄轉(zhuǎn)儲(chǔ)到 Grid++Report 的數(shù)據(jù)集中去 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) { } //主表點(diǎn)擊事件,根據(jù)主表的TASK_ID,顯示子表的數(shù)據(jù) 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("發(fā)貨地址不能為空!"); return; } if (string.IsNullOrEmpty(cmbDeliverMan.Text.Trim())) { MessageBox.Show("發(fā)貨員不能為空!"); return; } if (string.IsNullOrEmpty(cmbCheckMan.Text.Trim())) { MessageBox.Show("復(fù)核員不能為空!"); 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器械類(lèi)型的單獨(dú)打印模板 shtxd_ylpsqx if("@vcpz@"=="20" && "@vtweg: == “3l” ) * 其它31 渠道的 shtxd_lryy3l" * 633移動(dòng)類(lèi)型的寄售出庫(kù)單模板shtxd_lryy633 * 2025-8-28 季托生產(chǎn)的品種訂單單獨(dú)打 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報(bào)表主對(duì)象
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;//主報(bào)表傳參
Report.ParameterByName("car_no").AsString = carNo;//主報(bào)表傳參
Report.ParameterByName("driver_name").AsString = driverName;//主報(bào)表傳參
Report.ParameterByName("supercargo").AsString = superCargoName;//主報(bào)表傳參
Report.ParameterByName("bill_date").AsString = Taskdate;//主報(bào)表傳參
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;
//<<定義報(bào)表頭
IGRReportHeader Reportheader = Report.InsertReportHeader();
Reportheader.Height = 1.38;
//插入一個(gè)靜態(tài)文本框,顯示報(bào)表標(biāo)題文字
IGRStaticBox StaticBox = Reportheader.Controls.Add(GRControlType.grctStaticBox).AsStaticBox;
if (Selected == 0)
StaticBox.Text = "客戶(hù)清單打印";
else
StaticBox.Text = "產(chǎn)品清單打印";
StaticBox.Center = GRCenterStyle.grcsHorizontal; //使部件框在節(jié)中水平方向上居中對(duì)齊
StaticBox.Font.Point = 15;
StaticBox.Font.Bold = true;
StaticBox.Top = 0.40;
StaticBox.Width = 5.64;
StaticBox.Height = 0.58;
//>>定義報(bào)表頭
//<<根據(jù)DataGridView的列信息定義明細(xì)網(wǎng)格
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("請(qǐng)輸入交貨單號(hào)");
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 的數(shù)據(jù)轉(zhuǎn)儲(chǔ)到 Grid++Report 的數(shù)據(jù)集中
/// </summary>
/// <param name="Report">報(bào)表對(duì)象</param>
/// <param name="dt">DataTable對(duì)象</param>
public void FillRecordToReport(IGridppReport Report, DataTable dt)
{
MatchFieldPairType[] MatchFieldPairs = new MatchFieldPairType[Math.Min(Report.DetailGrid.Recordset.Fields.Count, dt.Columns.Count)];
//根據(jù)字段名稱(chēng)與列名稱(chēng)進(jìn)行匹配,建立DataReader字段與Grid++Report記錄集的字段之間的對(duì)應(yīng)關(guān)系
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 中的每一條記錄轉(zhuǎn)儲(chǔ)到 Grid++Report 的數(shù)據(jù)集中去
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)
{
}
//主表點(diǎn)擊事件,根據(jù)主表的TASK_ID,顯示子表的數(shù)據(jù)
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;
}
}
}
活到老,學(xué)到老。

浙公網(wǎng)安備 33010602011771號(hào)