ชุมชนคนรักภาษาเบสิค - Visual Basic Community

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

[VB.NET] การทำสรุปรายงานตัวเลขของ PageFooter ในแต่ละหน้า ActiveReports .NET

[คัดลอกลิงก์]

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973



โค้ดชุดนี้แอดมินขอนำเสนอ การทำสรุปรายงานตัวเลขของ PageFooter ในแต่ละหน้าว่าหน้านี้มียอดจำนวนเงินเท่าไหร่ และรวมยอดจำนวนเงินทุกหน้าที่ผ่านมา ลักษณะคล้ายๆกับมีการพิมพ์รายงานหลายๆหน้า แล้วทำการยกยอดมา แต่อันนี้ให้ไปใส่เพิ่มเติมเอง เพราะสามารถคำนวณหาได้ได้จาก ยอดรวมทุกหน้า - ยอดเฉพาะหน้านั้นๆ ... อนึ่ง!!! โค้ดชุดนี้จะต้องอาศัยทั้งการ Design Time และ Run Time มาใช้งานคู่กัน โดยให้ดูจากภาพ ...

ตัวอย่างข้อมูลเพื่อทำการสร้าง DataTable เอาไว้เป็น DataSource ...
  1.     '// Sample Data
  2.     Private Function FillDataSample() As DataTable
  3.         Dim table As New DataTable
  4.         table.Columns.Add("Col1")
  5.         table.Columns.Add("Col2")
  6.         Dim row As String()
  7.         For i = 0 To 9
  8.             '// Sample data.
  9.             row = New String() {i + 1, Format(100 * (i + 1), "#,##0.00")}
  10.             table.Rows.Add(row)
  11.         Next
  12.         Return table
  13.     End Function
คัดลอกไปที่คลิปบอร์ด

การกำหนดฟิลด์ให้กับชุดข้อมูล (เสมือนมาจากตารางข้อมูล) ...


การสร้างฟิลด์ที่ใช้ในการคำนวณผลลัพธ์ เพื่อหาค่ายอดรวมในแต่ละหน้า ... (DataInitialize - ActiveReports)
  1.         '/ Add Calculated Fields and see properties setting too.
  2.         Me.Fields.Add("SumPrice")
  3.         Me.Fields.Add("SumTotal")
คัดลอกไปที่คลิปบอร์ด

Design Time กับการกำหนดฟิลด์ผลรวมในแต่ละหน้า (PageTotal) ...


Design Time กับการกำหนดฟิลด์ผลรวมของทุกๆหน้าแบบ Group ...


มาดูโค้ดบนฟอร์มหลัก ...
  1. Public Class frmAR6Summary

  2.     Private Sub frmAR6Summary_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         Dim DT As New DataTable
  4.         '// Bound Data into DataTable.
  5.         DT = FillDataSample()
  6.         DS = New DataSet
  7.         DS.Tables.Add(DT)
  8.         dgvData.DataSource = DT
  9.         '//
  10.         Dim rpt1 As New arPrintSummary
  11.         rpt1.Run()
  12.         Me.Viewer1.Document = rpt1.Document
  13.         Me.Viewer1.ReportViewer.Zoom = 1
  14.     End Sub

  15.     '// Sample Data
  16.     Private Function FillDataSample() As DataTable
  17.         Dim table As New DataTable
  18.         table.Columns.Add("Col1")
  19.         table.Columns.Add("Col2")
  20.         Dim row As String()
  21.         For i = 0 To 9
  22.             '// Sample data.
  23.             row = New String() {i + 1, Format(100 * (i + 1), "#,##0.00")}
  24.             table.Rows.Add(row)
  25.         Next
  26.         Return table
  27.     End Function

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

มาดูโค้ดบน ActiveReports .NET ... ขั้นตอนการทำงานจะเริ่มจาก ReportStart แล้วไปที่ DataInitialize จากนั้นก็ทำการ FetchData เพื่อทำการพิมพ์ ...
  1. Imports DataDynamics.ActiveReports
  2. Imports DataDynamics.ActiveReports.Document
  3. Imports System.Data.OleDb

  4. Public Class arPrintSummary
  5.     Private ItemNo As Integer = 0
  6.     Private _RowCounter As Integer

  7.     Private Sub arPrintSummary_DataInitialize(sender As Object, e As System.EventArgs) Handles Me.DataInitialize
  8.         '/ Add all the columns from the DataSet as Fields for the report
  9.         Dim i As Integer
  10.         For i = 0 To (DS.Tables(0).Columns.Count) - 1
  11.             Me.Fields.Add(DS.Tables(0).Columns(i).ColumnName)
  12.         Next i
  13.         '/ Add Calculated Fields and see properties setting too.
  14.         Me.Fields.Add("SumPrice")
  15.         Me.Fields.Add("SumTotal")
  16.     End Sub

  17.     Private Sub arPrintSummary_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
  18.         If _RowCounter = DS.Tables(0).Rows.Count Then
  19.             '/ If the row counter has reached the end of the data then
  20.             '/ set the eArgs.EOF flag to true and exit the procedure
  21.             eArgs.EOF = True
  22.             Return
  23.         Else

  24.             '/ Populate the fields collection from the DataSet
  25.             Dim i As Integer
  26.             For i = 0 To (DS.Tables(0).Columns.Count) - 1
  27.                 Me.Fields(DS.Tables(0).Columns(i).ColumnName).Value = DS.Tables(0).Rows(_RowCounter)(i)
  28.             Next
  29.             Me.Fields("SumPrice").Value = CDbl(DS.Tables(0).Rows(_RowCounter)(1))
  30.             Me.Fields("SumTotal").Value = CDbl(DS.Tables(0).Rows(_RowCounter)(1))
  31.             'Advance Row Counter
  32.             eArgs.EOF = False
  33.             _RowCounter += 1
  34.         End If
  35.     End Sub

  36.     Private Sub arPrintSummary_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
  37.         ' การตั้งค่าหน้ากระดาษ
  38.         With PageSettings
  39.             ' หน่วยวัดเป็นนิ้ว
  40.             .Margins.Left = CmToInch(1) ' แปลงค่า 1.0 ซม. เป็นนิ้ว
  41.             .Margins.Right = 0.1
  42.             .Margins.Top = 0.5
  43.             .Margins.Bottom = 0.2
  44.             '// กรณีใช้กระดาษขนาด A5
  45.             '.Orientation = PageOrientation.Landscape
  46.             '.PaperKind = Drawing.Printing.PaperKind.A5
  47.             '//
  48.             '/  กรณีที่กำหนดขนาดกระดาษเองเพื่อทำการทดสอบ
  49.             .PaperKind = Drawing.Printing.PaperKind.Custom
  50.             '/ ตั้งค่ากระดาษแนวตั้ง
  51.             .Orientation = PageOrientation.Portrait
  52.             .PaperWidth = CmToInch(21) ' 21 ซม.
  53.             '// ปรับความสูงให้สั้นลงเพื่อทดสอบการพิมพ์ในแต่ละหน้า และยอดสรุป
  54.             .PaperHeight = CmToInch(10)
  55.         End With
  56.         '// เคลียร์ค่าต่างๆของ TextBox ก่อนการพิมพ์
  57.         txtItem.Text = ""
  58.         txtUnitPrice.Text = "0.00"
  59.         txtSumPrice.Text = "0.00"
  60.         txtSumTotal.Text = "0.00"
  61.     End Sub

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

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) + ActiveReports .NET ได้ที่นี่ ...
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

0

กระทู้

1

โพสต์

4

เครดิต

Newbie

Rank: 1

เครดิต
4
โพสต์ 2020-9-3 14:11:54 | ดูโพสต์ทั้งหมด

ขอบคุณมากครับ

1

กระทู้

11

โพสต์

81

เครดิต

Member

Rank: 2

เครดิต
81
โพสต์ 2020-9-7 16:13:48 | ดูโพสต์ทั้งหมด

ขอบคุณมากคะ

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

เครดิต
91
โพสต์ 2022-10-14 23:17:06 | ดูโพสต์ทั้งหมด

อจาร ใส่ color page ทำยังไงครับ

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
5973
 เจ้าของ| โพสต์ 2022-10-15 11:54:01 | ดูโพสต์ทั้งหมด

OUDONE ตอบกลับเมื่อ 2022-10-14 23:17
อจาร ใส่ color page ทำยังไงครับ

มันเป็นยังไงครับ Color Page หากหมายถึงสีพื้นก็เลือกจาก Background ได้เลยครับ
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

เครดิต
91
โพสต์ 2022-10-15 13:42:03 | ดูโพสต์ทั้งหมด

thongkorn ตอบกลับเมื่อ 2022-10-15 11:54
มันเป็นยังไงครับ Color Page หากหมายถึงสีพื้นก็เลือกจาก Background ได้เลยครับ

ขอบคุณครับ

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

เครดิต
91
โพสต์ 2022-10-17 15:56:04 | ดูโพสต์ทั้งหมด

แก้ไขครั้งสุดท้ายโดย OUDONE เมื่อ 2022-10-17 16:26

color page ครับ สีขาวครับ

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

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

x

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

เครดิต
91
โพสต์ 2022-10-18 21:25:09 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-3-29 14:41 , Processed in 0.222952 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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