玩轉FastReport.Net在windform窗體中自動打印一維碼條碼和二維碼的解決方法,這里說下FastReport.Community是MIT協議,故可以放到你的商用項目中
1、玩FastReport.net首先要一個報表設計軟件, 我這里用的是FastReport.Community版FastReport.Community.zip
2、英文版看的不爽可以加個中文語言包【點擊下載】
3、以上做好了那么就開始做一個回執單功能打印布局吧,我們就做一個醫院抽血過后的回執單,設計是這樣子的
第一,點擊保存字典,導出一個xml內容的.frd后綴文件默認名為:Dictionay.frd
第二、編輯導出的.frd文件,編輯完后保存,再導入
如下:
(1) BusinessObjectDataSource 是數據源節點。
(2) Name是BusinessObjectDataSource集合對象的名字。
(3) Column是集合泛型的屬性,模板綁定數據時,使用Column的Name屬性。
以下的格式是我編輯的內容,大家有不同的業務模型在這里編輯做成自己的系統業務模型后導入到報表中,數據區就可以選擇數據源,然后循環
<?xml version="1.0" encoding="utf-8"?> <Dictionary> <BusinessObjectDataSource Name="CaseReportFormData" ReferenceName="CaseReportFormData" DataType="System.Int32" Enabled="true"> <Column Name="BarCode" DataType="System.String"/> <Column Name="PatNo" DataType="System.String"/> <Column Name="Priority" DataType="System.String"/> <Column Name="Source" DataType="System.String"/> <Column Name="TakeReportAddress" DataType="System.String"/> <Column Name="TakeReportDesc" DataType="System.String"/> <Column Name="TestItemDesc" DataType="System.String"/> </BusinessObjectDataSource> </Dictionary>
第三步,設置好參數,這里的參數是不用循環的
這里要說下,設置一維碼和二維碼映射的集合對象屬性,一定要用一維碼和二維碼控件的表達式來映射集合對象屬性請看圖
第四,設置數據區數據循環,首先要將字典數據源CaseReportFormData綁定到 DataBand的屬性DataSource中 ,各個控件請看以下圖的說明來綁定映射字典數據源的屬性
最終報表真容就是如此,懂了就很簡單,這篇文章對於FastReport.Net只是基礎的用法,希望對你有用
第五、通過后台代碼將參數賦值,將數據源綁定真實數據,並且將數據傳到到打印機中,在你的應用一定要有這三個dll:FastReport.Bars.dll、FastReport.dll、FastReport.Editor.dll
你的應用里一定要引用using FastReport;,以下是一個winform窗體button的事件:
private void btnReceipt_Click(object sender, EventArgs e) { var reportPath = AppDomain.CurrentDomain.BaseDirectory + @"\test2.frx"; FastReport.Report report = new FastReport.Report(); report.Load(reportPath); //構造caseformdata list 數據 var businessObjects = new List<CaseReportFormData>(); /*自動打印*/ for (int i = 0; i < data.Count; i++) { var item = data[i]; var datamodel = new CaseReportFormData() { BarCode=item.LabNum, PatNo=item.HospNum, Priority=item.Priority, Source=item.Source, TakeReportAddress=item.TakeReportAddress, TakeReportDesc=item.TakeReportDesc, TestItemDesc=item.TestItemDesc }; //mysql數據賦值給對象 businessObjects.Add(datamodel); } //刷新數據源 report.RegisterData(businessObjects, "CaseReportFormData"); //實際數據模型 var model = new { CnName = "張老五", Sex = "男", AgeDesc = "100歲", PrintTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"), HospNum = "0001062975" }; var list = model.GetType().GetProperties(); //批量設置打印模板參數值 foreach (PropertyInfo pro in list) { var value = pro.GetValue(model, null); //獲取參數 FastReport.Data.Parameter param = report.Parameters.FindByName(pro.Name); if (param != null) { param.Value = value; //將屬性的值賦值給名字相同的報表參數 } } //關閉生成進度條 EnvironmentSettings eSet = new EnvironmentSettings(); eSet.ReportSettings.ShowProgress = false; //關閉對話框 report.PrintSettings.ShowDialog = false; //運行報表 report.Prepare(); report.PrintSettings.Printer = "Microsoft XPS Document Writer";//設置打印機 // 運行報表打印 report.Print(); // 釋放使用的資源 report.Dispose(); }
第六、FastReport.Net打印出來的效果如圖,這是一個A4紙,尾部未截圖,且看參數和循環數據打印效果
我可以提供給大家 【例子下載】 提取碼:8529
技術應用在 【我的自動化設備上位機軟件開發設計(二)-醫院智能采血管理系統】
如果你覺得 C# winform 使用FastReport.Net自動打印一維碼條碼和二維碼的解決方法 對你有用就拿去,不用謝