ProjectForStudy

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 116|ตอบกลับ: 2

[ถาม/ตอบ] Printdocument ได้แค่หน้าแรก ขอวิธีแก้ไขหน่อยครับ (มีโค๊ด)

[คัดลอกลิงก์]
  • อารมณ์วันนี้
    ง่วง
    7 วันที่แล้ว
  • เช็คชื่อแล้ว: 88 วัน

    [LV.6]JuniorII

    23

    กระทู้

    119

    โพสต์

    130

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    130
    Ticket
    36
    จิตพิสัย
    94
    รบกวนขอวิธีให้พิมพ์ได้หลายหน้าหน่อยครับ ลองหลายแบบแล้วยังไม่ได้เลย พิมพ์ได้แค่หน้าแรกที่เหลือหายหมดเลย
    อันนี้โค๊ดปุ่มสั่งพิมพ์ครับ
    1. <blockquote> Private Sub btn_print_Click(sender As Object, e As EventArgs) Handles Button1.Click
    คัดลอกไปที่คลิปบอร์ด
    อันนี้โค๊ดตรง Printdocument1 ครับ
    1. Private Sub PrintDocument1_PrintPage(sender As Object, e As Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage

    2.         Dim col(8) As Integer
    3.         col(0) = 5
    4.         col(1) = 35
    5.         col(2) = 100
    6.         col(3) = 250
    7.         col(4) = 390
    8.         col(5) = 465
    9.         col(6) = 555
    10.         col(7) = 665
    11.         col(8) = 760
    12.         Dim fnt As New Font("TH sarabun new", 14, FontStyle.Bold)
    13.         Dim fnt2 As New Font("TH sarabun new", 16, FontStyle.Bold)
    14.         'ส่วนหัว
    15.         Dim fnt_bold As New Font("TH sarabun new", 20, FontStyle.Bold)
    16.         e.Graphics.DrawString("                รายงานการขาย", fnt_bold, Brushes.Black, col(3), 20)

    17.         Dim fnt_date As New Font("TH sarabun new", 10, FontStyle.Bold)
    18.         Dim fnt_dateFillter As New Font("TH sarabun new", 10, FontStyle.Bold)
    19.         Dim minute As String = Date.Now
    20.         'Dim date3 As String = frm_pos.txt_cus_name.Text

    21.         e.Graphics.DrawString("" & frm_shop.txt_name.Text & "", fnt_dateFillter, Brushes.Black, col(3), 40)

    22.         'e.Graphics.DrawString("ชื่อลูกค้า : " & date3 & "", fnt_dateFillter, Brushes.Black, col(3), 59)
    23.         e.Graphics.DrawString("เงื่อนไขการค้นหา : " & lbl_where.Text & " ", fnt, Brushes.Black, col(0), 80)
    24.         e.Graphics.DrawString("               วันที่ : " & minute & " ", fnt, Brushes.Black, col(6), 80)
    25.         'e.Graphics.DrawString("หมายเลขใบเสร็จ : " & txt_sale_id.Text & "", fnt_dateFillter, Brushes.Black, col(3), 90)

    26.         e.Graphics.DrawLine(Pens.Black, col(0), 108, 900, 108)
    27.         e.Graphics.DrawLine(Pens.Black, col(0), 135, 900, 135)
    28.         Dim line As Integer = 112
    29.         e.Graphics.DrawString("No.", fnt, Brushes.Black, col(0), line)
    30.         e.Graphics.DrawString("เลขบิล", fnt, Brushes.Black, col(1), line)
    31.         e.Graphics.DrawString("      เวลาเริ่ม", fnt, Brushes.Black, col(2), line)
    32.         e.Graphics.DrawString("      เวลาสิ้นสุด", fnt, Brushes.Black, col(3), line)
    33.         e.Graphics.DrawString("  คอร์ส", fnt, Brushes.Black, col(4), line)
    34.         e.Graphics.DrawString("  สถานที่", fnt, Brushes.Black, col(5), line)
    35.         e.Graphics.DrawString("  พนักงานนวด", fnt, Brushes.Black, col(6), line)
    36.         e.Graphics.DrawString("  แคชเชียร์", fnt, Brushes.Black, col(7), line)
    37.         e.Graphics.DrawString("ราคา", fnt, Brushes.Black, col(8), line)
    38.         'FormatString(e.Graphics, "รวมราคาสุทธิ", col(8), line, StringAlignment.Far) 'ให้อักษรชิดขาว

    39.         For i As Integer = 0 To listview_report.Items.Count - 1
    40.             line += 26
    41.             Dim print_out(8) As String
    42.             With listview_report
    43.                 print_out(0) = .Items(i).SubItems(0).Text
    44.                 print_out(1) = .Items(i).SubItems(1).Text
    45.                 print_out(2) = .Items(i).SubItems(2).Text
    46.                 print_out(3) = .Items(i).SubItems(3).Text
    47.                 print_out(4) = .Items(i).SubItems(4).Text
    48.                 print_out(5) = .Items(i).SubItems(5).Text
    49.                 print_out(6) = .Items(i).SubItems(6).Text
    50.                 print_out(7) = .Items(i).SubItems(7).Text
    51.                 print_out(8) = .Items(i).SubItems(8).Text
    52.             End With

    53.             Dim printt As String = line
    54.             e.Graphics.DrawString(print_out(0), fnt, Brushes.Black, col(0), line)
    55.             e.Graphics.DrawString(print_out(1), fnt, Brushes.Black, col(1), line)
    56.             e.Graphics.DrawString(print_out(2), fnt, Brushes.Black, col(2), line)
    57.             e.Graphics.DrawString(print_out(3), fnt, Brushes.Black, col(3), line)
    58.             e.Graphics.DrawString(print_out(4), fnt, Brushes.Black, col(4), line)
    59.             e.Graphics.DrawString(print_out(5), fnt, Brushes.Black, col(5), line)
    60.             e.Graphics.DrawString(print_out(6), fnt, Brushes.Black, col(6), line)
    61.             e.Graphics.DrawString(print_out(7), fnt, Brushes.Black, col(7), line)
    62.             e.Graphics.DrawString(print_out(8), fnt, Brushes.Black, col(8), line)

    63.         Next

    64.         line += 15
    65.         e.Graphics.DrawString("_______________________________________________________________________________________________________________________", fnt, Brushes.Black, col(0), line)
    66.         line += 25
    67.         e.Graphics.DrawString("รวมเงิน : " & txt_total.Text & " บาท", fnt, Brushes.Black, col(7), line)
    68.         line += 20
    69.         ' e.Graphics.DrawString("รับเงิน : " & txt_receive.Text & " บาท # " + txt_detail.Text, fnt, Brushes.Black, col(4), line)
    70.         line += 20
    71.         'e.Graphics.DrawString("เงินทอน : " & txt_total.Text & " บาท", fnt, Brushes.Black, col(4), line)
    72.         line += 20
    73.         'e.Graphics.DrawString("พนักงานขาย : " & frm_pos.lbl_fullname.Text & "", fnb, Brushes.Black, 1, line)
    74.         line += 15
    75.         ' e.Graphics.DrawString("" & frm_setdatabase.txt_remark1.Text & "", fnb, Brushes.Black, 1, line)

    76.     End Sub
    คัดลอกไปที่คลิปบอร์ด





    ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

    คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

    x
  • อารมณ์วันนี้
    แฮปปี้
    1 ชั่วโมงที่แล้ว
  • เช็คชื่อแล้ว: 302 วัน

    [LV.8]ConquerorI

    26

    กระทู้

    646

    โพสต์

    3087

    เครดิต

    RapterClaw

    Rank: 5Rank: 5

    เครดิต
    3087
    Ticket
    1962
    จิตพิสัย
    1125

    Merciful MemberInstructor

    puklit โพสต์ 2019-7-6 08:36:30 | ดูโพสต์ทั้งหมด
    แก้ไขครั้งสุดท้ายโดย puklit เมื่อ 2019-7-6 14:24

    1. อันดับแรกท่านควรเลิกใช้คำสั่ง e.Graphics.DrawString ในการสร้างรายงาน
    2. ท่านควรศึกษาเรื่อง PageHeader/Details/PageFooter ของ Report
    3. วิธีผูกข้อมูลให้เข้ากับ Report ด้วย DataSet/DataTable, Database/Query


    สิ่งที่ผมบอกให้เลิกใช้ e.Graphics.DrawString เพราะมันเป็นคำสั่ง Runtime เกินไป มีข้อเสีย
    1. ยากต่อการออกแบบหน้าตาของ Report (ต่อให้เอาผู้ที่ชำนาญมาเขียน ผมมองว่าเค้าก็ไม่เลือกวิธีนี้สร้าง Report กันครับ)
    2. ต้องมากำหนดตำแหน่งใน Report รวมถึงที่ท่านพบปัญหาคือขึ้นหน้าใหม่
    3. ความสวยงามความเป็นระเบียบ สู้ออกแบบผ่านหน้า Report แล้วผูกข้อมูลให้เข้ามาใน Report

    นี่เป็นกระทู้เคสเดียวกันกับท่านที่พบปัญหาจาก คำสั่ง e.Graphics.DrawString เหมือนกัน
    http://www.projectforstudy.com/forum.php?mod=viewthread&tid=2142&extra=page%3D1%26filter%3Dtypeid%26typeid%3D21
    จากกระทู้ดังกล่าวนี้โค้ดสร้าง Report ผมจะอยู่ที่ 31 บรรทัด ถึงแม้ว่ารายงาน จะมีกี่หน้าก็ตาม
    ตำแหน่งการจัดวาง Report หรือขึ้นหน้าใหม่มันจะจัดการให้ท่านเอง
    จากที่ผมดูของท่าน รายงาน 1 หน้า เขียนโค้ด 84 บรรทัดแล้ว เพราะมันเป็น Runtimeผมเดาว่า ที่ท่านเขียน Runtime ด้วย คำสั่ง e.Graphics.DrawString บางทีอาจจะเขียน 1 บรรทัดแล้วต้องรันดูหน้าตามันทุกครั้งด้วยซ้ำว่าที่กำหนดค่าให้ไป
    มันของมาพอดีหรือระยะมันได้กับความต้องการหรือไม่?

    ส่วนกระทู้นี้เป็น Report ที่ผมใช้ของ DevExpress (XtraReport)
    http://www.projectforstudy.com/thread-2220-1-1.html

    ส่วนกระทู้นี้เป็นตัวอย่างที่ผมสร้างรายงานผ่าน Design mode แล้วค่อยผูกข้อมูลให้กับรายงานก่อนแสดงผล
    ถึงแม้ผมจะไม่ใช้ RDLC  report แต่หลักการสร้างรายงาน ควรจะสร้างใน Design mode แล้วผูกข้อมูลให้กับรายงานผ่านทาง DataSet/DataTable, Database/Query แทน
    การส่งค่าไปยังรายงานโดยตรงโดยผ่านคำสั่ง e.Graphics.DrawString เพราะไม่อย่างนั้นปัญหามันจะยังไม่จบ ท่านต้องบอกตำแหน่งวาง หรือหน้ากระดาษ มันจะยากกว่ากันมาก
    และไม่ยืดหยุ่น

    ในบรรดารายงาน RDLC report / Crystal report / XtraReport (DevExpress) / Active report และค่าย Report อื่น ที่ผมไม่ได้ยกตัวอย่าง
    หลักการเหมือนกันคือ
    1. PageHeader/Details/PageFooter ของ Report จะเป็นตัวกำหนดตำแหน่งข้อมูลในรายงาน
    2. วิธีผูกข้อมูลให้เข้ากับ Report ด้วย DataSet/DataTable, Database/Query

    สุดท้ายท่านจะเหนือยน้อยลงถ้าท่านเลิกใช้คำสั่ง e.Graphics.DrawString ในการสร้างรายงานครับ

    ตัวอย่างของ RDLC report ครับ (ท่านสามารถหาดูและศึกษาเพิ่มเติมได้จาก Keyword : RDLC report PageHeader/Details/PageFooter)
    https://www.youtube.com/watch?v=n6uXtDP3jbA
    https://www.youtube.com/watch?v=-Q2k5BEinzI
    https://www.youtube.com/watch?v=kdGm7t9r6N0
    https://www.youtube.com/watch?v=LpaEtQnZb9E
    https://www.youtube.com/watch?v=WGKzFKgeoo8

    ข้อมูลบางอย่างที่ต้องการประมวลผล สามารถสร้างฟังก์ชั่นผ่านรายงานได้เลย ไม่จำเป็นต้องเขียนเป็นโปรแกรมประมวลผล
    แล้วส่งให้รายงานแสดง มันจะได้ช่วยลดเวลาในการสร้างรายงานได้มหาศาลครับ




  • อารมณ์วันนี้
    ง่วง
    7 วันที่แล้ว
  • เช็คชื่อแล้ว: 88 วัน

    [LV.6]JuniorII

    23

    กระทู้

    119

    โพสต์

    130

    เครดิต

    BabyGhost

    Rank: 1

    เครดิต
    130
    Ticket
    36
    จิตพิสัย
    94
     เจ้าของ| mpv602 โพสต์ 2019-7-7 14:54:27 | ดูโพสต์ทั้งหมด
    puklit ตอบกลับเมื่อ 2019-7-6 08:36
    1. อันดับแรกท่านควรเลิกใช้คำสั่ง e.Graphics.DrawString ในการสร้ ...

    ขอบคุณมากครับ
    ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

    รายละเอียดเครดิต

    ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|ProjectForStudy  

    GMT+7, 2019-7-19 08:48 , Processed in 0.056701 second(s), 26 queries .

    Powered by Discuz! X3.2 R20150609, Rev.38

    © 2001-2013 Comsenz Inc.

    ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้