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

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

[VB.NET] การจัดกลุ่มรายงานให้กับ ActiveReports แบบวิธีการ UnBound Data

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

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
5973



จากบทความเรื่อง [VB.NET] การพิมพ์รายงานด้วย ActiveReports .NET แบบวิธีการ UnBound Data เราสามารถปรับแต่งเล็กน้อยเพื่อทำการจัดกลุ่ม (Grouping) ให้กับรายงานได้ไม่ยากเลยครับ ...

การกำหนดฟิลด์เพื่อจัดกลุ่มให้กับ GroupHeader ...


ข้อมูลของ DepartmentName จะมีอยู่ 5 กลุ่ม ...


การเพิ่ม Group Header/Footer ...


มาดูโค้ดฉบับเต็มกันเถอะ ... ฟอร์มหลัก
  1. Public Class frmUnBoundGroup

  2.     Private Sub frmUnBoundGroup_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  3.         '// Connect to DataBase.
  4.         If Not ConnectDataBase() Then
  5.             Me.Close()
  6.             Exit Sub
  7.         End If
  8.         '// ประกาศตัวแปร rpt จากหน้ารายงาน ActiveReports
  9.         Dim rpt As New NewActiveReport1
  10.         '// สั่งรัน
  11.         rpt.Run()
  12.         Me.Viewer1.ReportViewer.Zoom = 1    '(100%)
  13.         '// แสดงผลรายงานเอกสาร
  14.         Me.Viewer1.Document = rpt.Document
  15.     End Sub

  16.     Private Sub frmUnBoundData_FormClosed(sender As Object, e As System.Windows.Forms.FormClosedEventArgs) Handles Me.FormClosed
  17.         Me.Dispose()
  18.         GC.SuppressFinalize(Me)
  19.         Application.Exit()
  20.     End Sub

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

โค้ดในส่วนของโมดูล (หากิน) ในการเชื่อมต่อกับฐานข้อมูล ...
  1. Imports System.Data.OleDb
  2. Imports Microsoft.VisualBasic

  3. Module modDataBase
  4.     '// Declare variable one time but use many times.
  5.     Public Conn As OleDbConnection
  6.     Public Cmd As OleDbCommand
  7.     Public DS As DataSet
  8.     Public DR As OleDbDataReader
  9.     Public DA As OleDbDataAdapter
  10.     Public strSQL As String '// Major SQL
  11.     Public strStmt As String    '// Minor SQL

  12.     '// Data Path
  13.     Public strPathData As String = MyPath(Application.StartupPath)

  14.     Public Function ConnectDataBase() As Boolean
  15.         Try
  16.             strPathData = MyPath(Application.StartupPath) & "Data"
  17.             Dim strConn As String = _
  18.                 "Provider = Microsoft.ACE.OLEDB.12.0;" & _
  19.                 "Data Source = " & strPathData & "Contact.accdb"

  20.             Conn = New OleDb.OleDbConnection(strConn)
  21.             Conn.Open()
  22.             ' Return
  23.             Return True
  24.         Catch ex As Exception
  25.             MessageBox.Show(ex.Message)
  26.             Return False
  27.         End Try
  28.     End Function

  29.     ' / --------------------------------------------------------------------------------
  30.     ' / Get my project path
  31.     ' / AppPath = C:\My Project\bin\debug
  32.     ' / Replace "\bin\debug" with ""
  33.     ' / Return : C:\My Project\
  34.     Function MyPath(AppPath As String) As String
  35.         '/ MessageBox.Show(AppPath);
  36.         AppPath = AppPath.ToLower()
  37.         '/ Return Value
  38.         MyPath = AppPath.Replace("\bin\debug", "").Replace("\bin\release", "").Replace("\bin\x86\debug", "")
  39.         '// If not found folder then put the \ (BackSlash ASCII Code = 92) at the end.
  40.         If Right(MyPath, 1) <> Chr(92) Then MyPath = MyPath & Chr(92)
  41.     End Function
  42. End Module
คัดลอกไปที่คลิปบอร์ด

โค้ดในส่วนของ ActiveReports .NET ...
  1. Imports System.Data.OleDb
  2. Imports DataDynamics.ActiveReports
  3. Imports DataDynamics.ActiveReports.Document

  4. Public Class NewActiveReport1
  5.     Private ItemNo As Integer
  6.     '// Start Here.
  7.     Private Sub NewActiveReport1_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
  8.         '/ การตั้งค่าหน้ากระดาษ
  9.         With PageSettings
  10.             '/ หน่วยวัดเป็นนิ้ว แต่ใช้การแปลงหน่วยด้วย CmToInch เข้าช่วย หากเราถนัดหน่วยวัด ซม.
  11.             .Margins.Left = CmToInch(0.7) '// แปลงค่า 0.7 ซม. เป็นนิ้ว
  12.             .Margins.Right = CmToInch(0.5)
  13.             .Margins.Top = 1.0
  14.             .Margins.Bottom = 1
  15.             ' ตั้งค่ากระดาษแนวตั้ง
  16.             .Orientation = PageOrientation.Portrait
  17.             ' กระดาษขนาด A4
  18.             .PaperKind = Drawing.Printing.PaperKind.A4
  19.         End With

  20.         '// เคลียร์ค่าก่อนการพิมพ์
  21.         txtFullName.Text = ""
  22.         txtNickName.Text = ""
  23.         txtPositionName.Text = ""
  24.         txtDepartmentName.Text = ""
  25.         ItemNo = 0
  26.         '// เริ่มต้นการอ่านข้อมูล
  27.         Try
  28.             '// ทำการ Query ฟิลด์ข้อมูลที่ต้องการมาแสดงผล
  29.             strSQL = _
  30.                 " SELECT tblContact.ContactPK, tblContact.Fullname, tblContact.Nickname, tblPosition.PositionName, tblDepartment.DepartmentName  " & _
  31.                 " FROM tblDepartment INNER JOIN (tblPosition INNER JOIN tblContact ON tblPosition.PositionPK = tblContact.PositionFK) ON " & _
  32.                 " tblDepartment.DepartmentPK = tblContact.DepartmentFK " & _
  33.                 " ORDER BY DepartmentName, ContactPK "
  34.             '// Open connection and create DataReader.     
  35.             Cmd = New OleDbCommand(strSQL, Conn)
  36.             If Conn.State = ConnectionState.Closed Then Conn.Open()
  37.             DR = Cmd.ExecuteReader()

  38.         Catch ex As Exception
  39.             MessageBox.Show(ex.Message)
  40.         End Try

  41.     End Sub

  42.     '// Add fields to the report's fields collection.
  43.     Private Sub NewActiveReport1_DataInitialize(sender As Object, e As System.EventArgs) Handles Me.DataInitialize
  44.         Fields.Add("FullName")
  45.         Fields.Add("NickName")
  46.         Fields.Add("PositionName")
  47.         Fields.Add("DepartmentName")
  48.     End Sub

  49.     '// Retrieve information to populate the report fields.
  50.     Private Sub NewActiveReport1_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
  51.         Try
  52.             DR.Read()
  53.             '// นำข้อมูลมาผูกเข้ากับฟิลด์ที่เรากำหนดบน ActiveReports
  54.             Me.Fields("FullName").Value = DR("FullName")
  55.             Me.Fields("NickName").Value = DR("NickName")
  56.             Me.Fields("PositionName").Value = DR("PositionName")
  57.             Me.Fields("DepartmentName").Value = DR("DepartmentName")
  58.             '// ยังไม่หมดข้อมูล End Of File = เท็จ ... กระโดดไปพิมพ์ที่ Detail1_Format อีกครั้ง
  59.             eArgs.EOF = False
  60.         Catch ex As Exception
  61.             'MessageBox.Show(ex.ToString())
  62.             '// แสดงว่าหมดข้อมูลแล้ว นั่นคือสิ้นสุดการพิมพ์
  63.             eArgs.EOF = True
  64.         End Try
  65.     End Sub

  66.     '// หากเหตุการณ์ FetchData ทำให้ EOF = False แสดงว่ายังไม่หมดข้อมูล จะเกิดการพิมพ์ไปเรื่อยๆ
  67.     Private Sub Detail1_Format(sender As System.Object, e As System.EventArgs) Handles Detail1.Format
  68.         '// นำค่าจากฟิลด์ที่เรากำหนดมาแสดงผลใน TextBox ของ ActiveReports
  69.         txtFullName.Text = Me.Fields("FullName").Value
  70.         txtNickName.Text = Me.Fields("NickName").Value
  71.         txtPositionName.Text = Me.Fields("PositionName").Value
  72.         ItemNo = ItemNo + 1
  73.     End Sub

  74.     Private Sub NewActiveReport1_ReportEnd(sender As Object, e As System.EventArgs) Handles Me.ReportEnd
  75.         DR.Close()
  76.         Conn.Close()
  77.     End Sub

  78.     Private Sub GroupHeader1_Format(sender As System.Object, e As System.EventArgs) Handles GroupHeader1.Format
  79.         Me.GroupHeader1.ColumnLayout = True
  80.         Me.GroupHeader1.DataField = "DepartmentName"
  81.         txtDepartmentName.Text = Me.Fields("DepartmentName").Value
  82.         'Me.GroupHeader1.GroupKeepTogether = GroupKeepTogether.None
  83.         'Me.GroupHeader1.KeepTogether = True
  84.         'Me.GroupHeader1.NewColumn = NewColumn.None
  85.         'Me.GroupHeader1.NewPage = NewPage.None
  86.         'Me.GroupHeader1.RepeatStyle = RepeatStyle.None
  87.         'Me.GroupHeader1.UnderlayNext = False
  88.     End Sub

  89.     Private Sub GroupFooter1_Format(sender As System.Object, e As System.EventArgs) Handles GroupFooter1.Format
  90.         '// NewPage.None จะพิมพ์กลุ่มต่อไป
  91.         Me.GroupFooter1.NewPage = NewPage.After
  92.         txtSum.Text = "Total: " & ItemNo
  93.         ItemNo = 0
  94.     End Sub

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

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

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

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

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

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

ไม่มี insert group   ครับ

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

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

x

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

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

OUDONE ตอบกลับเมื่อ 2022-10-15 11:52
ไม่มี insert group   ครับ

หากเอา ActiveReport 6 ไปใช้บน VS ที่สูงกว่า 2010 จะไม่มีครับ ดังนั้นต้องมาทำใน VS2010 ก่อน แล้วค่อยนำไปใช้บน VS รุ่นที่สูงกว่าครับ
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

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

thongkorn ตอบกลับเมื่อ 2022-10-15 11:56
หากเอา ActiveReport 6 ไปใช้บน VS ที่สูงกว่า 2010 จะไม่มีครับ ด ...

ขอบคุณครับ อย่าให้ค่ากาเฟ อจาร จ่ายผ่านทางใหมครับ

308

กระทู้

498

โพสต์

5973

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

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

OUDONE ตอบกลับเมื่อ 2022-10-15 13:46
ขอบคุณครับ อย่าให้ค่ากาเฟ อจาร จ่ายผ่านทางใหมครับ

ขอบคุณมากๆครับผม แต่ผมไม่ขอรับการบริจาคใดๆ ผมแบ่งปันความรู้ให้ด้วยใจจริงล้วนๆ และก็ไม่ได้เดือดร้อนอะไรครับผม
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด

1

กระทู้

13

โพสต์

91

เครดิต

Member

Rank: 2

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

thongkorn ตอบกลับเมื่อ 2022-10-15 15:34
ขอบคุณมากๆครับผม แต่ผมไม่ขอรับการบริจาคใดๆ ผมแบ่งป ...

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

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

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

GMT+7, 2024-3-29 22:24 , Processed in 0.152465 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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