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

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

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

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

252

กระทู้

370

โพสต์

3078

เครดิต

ผู้ดูแลระบบ

Rank: 9Rank: 9Rank: 9

เครดิต
3078



โค้ดชุดนี้แอดมินขอนำเสนอ การทำสรุปรายงานตัวเลขของ 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

กระทู้

8

โพสต์

61

เครดิต

Member

Rank: 2

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

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

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

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

GMT+7, 2020-9-24 09:52 , Processed in 0.372904 second(s), 4 queries , File On.

Powered by Discuz! X3.3 R20170401, Rev.54

© 2001-2017 Comsenz Inc.

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