สอบถามวิธีการปริ้นหลายๆหน้า โดยมาจาก form เดียวกันครับ [Crystal Report , C#]
ได้ครับ ผมก็ทำอยู่ โดยจะ loop เรียกฟอร์มขึ้นมาใหม่
Code (VB.NET)
nform = New PrintINVPrintA5Frm() ' Must be created on this thread!
'Application.Run(nform)
nform.Show(Me)
หน้าที่มีรีพอร์ต ก็จะสั่ง PrintToPrinter แล้วก็ปิดฟอร์มไป
Code (VB.NET)
cry = New ReportDocument
cry.Load(rptPathA5 & "Sale_financePrintA5CrystalReport2.rpt", CrystalDecisions.Shared.OpenReportMethod.OpenReportByTempCopy)
cry.SetDataSource(PrintINVFrm.Sale_financeDataSet1)
CrystalReportViewer1.ReportSource = cry
CrystalReportViewer1.Refresh()
cry.PrintOptions.PrinterName = "HP LaserJet Professional P1102"
cry.PrintToPrinter(1, False, 0, 0)
Me.Close()
แต่ปัญหาคือ บางฟอร์มมันโหลดขึ้นมาแล้วเป็นหน้าเปล่า ปัญหาที่ผมก็ยังแก้ไม่ตกอยู่เหมือนกัน
Date :
2018-03-22 17:32:48
By :
pakyaudio
อย่างของผมมันจะใช้ Crystal Report Viewer เป็นตัวเรียกฟอร์ม
ตัวอย่างแบบนี้นะครับ
Code (C#)
LotteryFormViewer viewer = new LotteryFormViewer();
LotteryForm report = new LotteryForm();
//Set value .....
viewer.LotteryViwer.ReportSource = report; //maping value with form
viewer.Show(); //show form
ท่านหมายถึงว่าให้ผม loop mapping ค่า แล้วทำการเรียกฟอร์มมาเรื่อยๆแบบนี้ใช่ไหมครับ
เช่น
Code (C#)
for(int i = 0 ; i < arrays.lenght ; i ++)
{
//Set Value....
viewer.LotteryViwer.ReportSource = report; //maping value with form
viewer.Show(); //show form
}
แบบนี้เรื่อยๆรึัเปล่าครับ
ถ้าใช่แบบนี้ถ้า 10 หน้าฟอร์มมันก็จะเด้งมา 10 หน้าต่างแล้วเราก็ต้องกดปริ้น 10 อันใช่ไหมครับ
ถ้าใช่แบบนี้มันไม่มีวิธีที่ฟอร์มเด้งมาหน้าต่างเดียวแล้วให้ปริ้น 10 แผ่นพร้อมกันใช่ไหมครับ
ขอบคุณครับ
Date :
2018-03-23 10:39:54
By :
zlzca71013
ในลูป show form แล้วสั่งปริ๊นต์เลยครับ แล้วก็ปิดฟอร์ม โหลดฟอร์มใหม่ปริ๊นต์แล้วก็ปิดฟอร์มอีก จนกว่าจะออกจากลูป
Code (VB.NET)
cry.PrintOptions.PrinterName = "HP LaserJet Professional P1102" 'ชื่อเครื่องพิมพ์ที่ถูกติดตั้งไว้ในเครื่อง
cry.PrintToPrinter(1, False, 0, 0)
Me.Close()
ประวัติการแก้ไข 2018-03-23 11:20:56
Date :
2018-03-23 11:20:32
By :
pakyaudio
อ่อท่านกำลังหมายถึงให้มัน print เลยโดยที่ไม่ต้องกดปริ้นจากตัว form ใช่ไหมครับแบบนี้หน้าฟอร์มก็จะไม่ขึ้นมา แล้วปริ้น
แล้วแบบนี้ถ้าเราต้องการที่จะเลือกเครื่องปริ้นก่อนจะปริ้นก็คือไม่ได้เลยใช่ไหมครับ
เพราะมันถูก fix มาใน code อยู่แล้ว
ประวัติการแก้ไข 2018-03-23 15:31:56
Date :
2018-03-23 15:16:22
By :
zlzca71013
ผมว่าผมได้ละครับ ผมจะให้มี dropdown ให้เลือกชื่อ printer แล้วก็เอามา set เข้ากับ code แล้วทำตามแบบของท่านเลย
ขอบคุณมากครับ
Date :
2018-03-23 16:10:06
By :
zlzca71013
ใช่ครับทำ Combobox เอาไว้เลือกเครื่องปริ๊นต์สักอัน
แอดชื่อเครื่องปริ๊นต์ลงใน Combobox เป็น VB นะครับ C# ไม่ค่อยถนัด
Code (VB.NET)
Me.ComboBox1.Items.Add("ไม่ได้เลือกเครื่องพิมพ์")
For Each InstalledPrinters In _
System.Drawing.Printing.PrinterSettings.InstalledPrinters
Me.ComboBox1.Items.Add(InstalledPrinters)
Next InstalledPrinters
Date :
2018-03-23 17:55:08
By :
pakyaudio
ตอนนี้ผมมีปัญหาครับ ผม loop เพื่อเซ็ตค่าลง form ใหม่เพื่อปริ้น ปรากฏว่าค่าเดิมที่เคยปริ้นไปแล้วมันไม่หายไปครับ
ผมทั้งใช้ Array.Clear(...); ก็แล้ว ใช้ new array[] ใหม่เลยก็แล้ว ค่ามันยังไม่หายไปเลยครับ
หรืออาจเป็นไปได้ไหมครับว่า ค่ามันฝั่งลง Text Object ของฟอร์มไปแล้วครับ ผมงงมาก
Code (C#)
if (((i + 1) % 4 == 0)|| (i+1 == section.Count))
{
report.PrintOptions.PrinterName = cBoxPrinter.Text;
report.PrintToPrinter(1, false, 0, 0);
if (i + 1 != section.Count)
{
for (int count = 0; count < 80; count++)
{
txtTimeNo[0, counts].Text = "";
txtTimeNo[1, counts].Text = "";
txtTimeNo[2, counts].Text = "";
//ทำการเซ็ตค่าเป็นว่างให้หมดก็ไม่หาย
//หรือผมใช้ txtTimeNo = new TextObject[3, 80]; ค่าก็ยังไม่หายไปครับ ต้องทับเท่านั้นเลย
}
}
}
งงมากครับ ช่วยแนะนำทีครับ
Date :
2018-03-23 20:58:48
By :
zlzca71013
ผมได้ละครับ ไปเซ๊คค่าของ Text object ให้เป็นค่าว่างครับก่อนใส่ค่าใหม่
Code (C#)
((TextObject)report.ReportDefinition.Sections["Section4"].ReportObjects["txtTime" + (count + 1).ToString()]).Text = "";
ขอบคุณท่าน pakyaudio มากครับ
Date :
2018-03-23 21:20:59
By :
zlzca71013
Load balance : Server 03