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

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

[VB.NET] การทำหมายเลขหน้าเป็นเลขไทยใน ActiveReports .NET

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

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

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

Rank: 9Rank: 9Rank: 9

เครดิต
6583




ก็เป็นคำถามมาจากมิตรรักแฟนคลับ Visual Basic & ActiveReports ซึ่งแอดมินก็เคยใช้แต่หมายเลขหน้าเป็นเลขอารบิค โดยเลือก ReportInfo เข้ามาวางแปะลงบนฟอร์มของ ActiveReports จากนั้นก็ใส่สคริปท์ที่มีมาให้ในตัวของมันตรงคุณสมบัติ FormatString เช่น Page {PageNumber}/{PageCount} ผลลัพธ์ที่ได้คือ Page 1/123 ... ทีนี้พอจะทำเป็นเลขไทยนี่ซิ งงตึ๊บไปนานเลย เพราะเราเอาค่าหมายเลขหน้าออกมาตรงๆจากเหตุการณ์ PageFooter1_Format ไม่ได้ หลังจากที่ค้นหาข้อมูลจาก Help หรือคู่มือไปแว่บนึง ก็เลยทำให้รู้วิธีการในการอ่านค่าเลขหน้าออกมา ด้วยการย้ายไปอ่านค่าในเหตุการณ์ PageFooter1_BeforePrint แทน ... เท่านี้ก็จบ


Design Time ในการใช้ ReportInfo ...



มาดูโค้ดฉบับเต็มกันเถอะ ... (ส่วนของฟอร์ม VB)
  1. Public Class frmARNetPage

  2.     Private Sub btnGenData_Click(sender As System.Object, e As System.EventArgs) Handles btnGenData.Click
  3.         Call FillData()
  4.         Call InitializeGrid()
  5.     End Sub

  6.     ' / --------------------------------------------------------------------------
  7.     Private Sub FillData()
  8.         Dim dt As New DataTable
  9.         dt.Columns.Add("PK")
  10.         dt.Columns.Add("ID")
  11.         dt.Columns.Add("Number Field")
  12.         dt.Columns.Add("Double Field")
  13.         dt.Columns.Add("Date Field")
  14.         Dim RandomClass As New Random()
  15.         For i As Long = 0 To 999
  16.             Dim dr As DataRow = dt.NewRow()
  17.             dr(0) = i + 1
  18.             dr(1) = "ID" & i + 1
  19.             dr(2) = RandomClass.Next(1, 99999)
  20.             dr(3) = FormatNumber(RandomClass.Next(100, 1000) + RandomClass.NextDouble(), 2)
  21.             '// Random Date
  22.             Dim d As Date = Date.Today
  23.             d = d.AddDays(RandomClass.Next(-30, 0))
  24.             dr(4) = FormatDateTime(d, DateFormat.ShortDate).ToString
  25.             dt.Rows.Add(dr)
  26.         Next
  27.         DataGridView1.DataSource = dt
  28.         Label1.Text = "Total : " & dt.Rows.Count.ToString("#,##") & " Records."
  29.     End Sub

  30.     ' / --------------------------------------------------------------------------
  31.     '// การตั้งค่าเริ่มต้นให้กับตารางกริดในแบบ @Run Time
  32.     Private Sub InitializeGrid()
  33.         With DataGridView1
  34.             .RowHeadersVisible = False
  35.             .AllowUserToAddRows = False
  36.             .AllowUserToDeleteRows = False
  37.             .AllowUserToResizeRows = False
  38.             .MultiSelect = False
  39.             .SelectionMode = DataGridViewSelectionMode.FullRowSelect
  40.             .ReadOnly = True
  41.             .Font = New Font("Tahoma", 9)
  42.             ' จัดความกว้างของแต่ละหลัก
  43.             .AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill
  44.             '.AutoResizeColumns()
  45.             ' Adjust Header Styles
  46.             With .ColumnHeadersDefaultCellStyle
  47.                 .BackColor = Color.Navy
  48.                 .ForeColor = Color.White
  49.                 .Font = New Font("Tahoma", 9, FontStyle.Bold)
  50.             End With
  51.         End With
  52.     End Sub

  53.     Private Sub frmARNetPage_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  54.         Me.Label1.Text = ""
  55.     End Sub

  56.     Private Sub btnPreview_Click(sender As System.Object, e As System.EventArgs) Handles btnPreview.Click
  57.         If DataGridView1.Rows.Count <= 0 Then Exit Sub
  58.         ' Instance name ARDesigner มันจะชี้ไปที่ไฟล์ NewActiveReport1.vb
  59.         Dim rpt As New NewActiveReport1
  60.         '/ Run Report
  61.         rpt.Run()
  62.         '/ โหลดรายงาน document (arPrintBillA4A5) เข้าสู่ ActiveReports Viewer
  63.         Me.Viewer1.Document = rpt.Document
  64.         '// Zoom 90%
  65.         Me.Viewer1.ReportViewer.Zoom = 0.9
  66.     End Sub
  67. End Class
คัดลอกไปที่คลิปบอร์ด



มาดูโค้ดฉบับเต็มในส่วนของ ActiveReports ...
  1. Imports DataDynamics.ActiveReports
  2. Imports DataDynamics.ActiveReports.Document

  3. Public Class NewActiveReport1
  4.     Dim sRow As Integer

  5.     Private Sub NewActiveReport1_FetchData(sender As Object, eArgs As DataDynamics.ActiveReports.ActiveReport.FetchEventArgs) Handles Me.FetchData
  6.         If sRow >= frmARNetPage.DataGridView1.RowCount Then
  7.             '/ หากหมดแล้วก็จบการพิมพ์
  8.             eArgs.EOF = True
  9.             Exit Sub
  10.             '/ ยังไม่หมดข้อมูล
  11.         Else
  12.             eArgs.EOF = False
  13.         End If

  14.     End Sub

  15.     Private Sub NewActiveReport1_ReportStart(sender As Object, e As System.EventArgs) Handles Me.ReportStart
  16.         '/ การตั้งค่าหน้ากระดาษ
  17.         With PageSettings
  18.             '/ หน่วยวัดเป็นนิ้ว
  19.             .Margins.Left = CmToInch(1) ' แปลงค่า 1.0 ซม. เป็นนิ้ว
  20.             .Margins.Right = CmToInch(0.5)
  21.             .Margins.Top = 0.5
  22.             .Margins.Bottom = 0.2
  23.             '/ ตั้งค่ากระดาษแนวตั้ง
  24.             .Orientation = PageOrientation.Portrait
  25.             '/ กระดาษขนาด A4
  26.             '.PaperKind = Drawing.Printing.PaperKind.A4
  27.             '/ กรณีที่กำหนดขนาดกระดาษเอง
  28.             .PaperKind = Drawing.Printing.PaperKind.Custom
  29.             .PaperWidth = CmToInch(21) ' 21 ซม.
  30.             .PaperHeight = CmToInch(14.8)
  31.         End With
  32.         '/ ปกติต้องเคลียร์ค่าต่างๆของ TextBox ก่อนการพิมพ์
  33.         txtPK.Text = ""
  34.         txtID.Text = ""
  35.         txtNumber.Text = ""
  36.         txtDouble.Text = ""
  37.         txtDate.Text = ""
  38.     End Sub

  39.     Private Sub Detail1_Format(sender As Object, e As System.EventArgs) Handles Detail1.Format
  40.         With frmARNetPage.DataGridView1
  41.             '// หลักแรกของ DataGridView แล้วเลื่อนตามจำนวนแถว sRow
  42.             txtPK.Text = .Rows(sRow).Cells(0).Value
  43.             '// หลักที่ 2
  44.             txtID.Text = .Rows(sRow).Cells(1).Value
  45.             '// หลักที่ 3
  46.             txtNumber.Text = Format(CDbl(.Rows(sRow).Cells(2).Value), "#,##0")
  47.             '// หลักที่ 4
  48.             txtDouble.Text = Format(CDbl(.Rows(sRow).Cells(3).Value), "#,##0.00")
  49.             '// หลักที่ 5
  50.             txtDate.Text = Format(CDate(.Rows(sRow).Cells(4).Value), "dd/MM/yyyy")
  51.         End With
  52.         '// เลื่อนแถวของตารางกริด
  53.         sRow += 1
  54.     End Sub

  55.     ' / --------------------------------------------------------------------------
  56.     Private Sub PageFooter1_BeforePrint(sender As Object, e As System.EventArgs) Handles PageFooter1.BeforePrint
  57.         '// ReportInfo1.Text = "1/72"
  58.         Dim strPage As String = Me.ReportInfo1.Text
  59.         lblPage.Text = "หน้าที่: " & ConvertArabic2Thai(strPage)
  60.     End Sub

  61.     ' / --------------------------------------------------------------------------
  62.     ' / ฟังค์ชั่นในการแปลงเลขอารบิคเป็นเลขไทย
  63.     Function ConvertArabic2Thai(ByVal strPage As String) As String
  64.         Dim strWord As String = String.Empty
  65.         '// แยก PageNumber ออกจาก PageCount ด้วยเครื่องหมาย /
  66.         Dim p As String() = Split(strPage, "/")
  67.         '// วนรอบ 2 ครั้งโดยข้อมูลชุดแรกเป็น PageNumber (หมายเลขหน้า)/PageCount จำนวนหน้าทั้งหมด
  68.         '// หรือแก้ไขให้นับจำนวนหน้าทั้งหมดเพียงครั้งเดียวก็พอ
  69.         For Cnt = 0 To UBound(p)
  70.             For i = 1 To Len(p(Cnt))
  71.                 Select Case Mid(p(Cnt), i, 1)
  72.                     Case 0
  73.                         strWord = strWord & "๐"
  74.                     Case 1
  75.                         strWord = strWord & "๑"
  76.                     Case 2
  77.                         strWord = strWord & "๒"
  78.                     Case 3
  79.                         strWord = strWord & "๓"
  80.                     Case 4
  81.                         strWord = strWord & "๔"
  82.                     Case 5
  83.                         strWord = strWord & "๕"
  84.                     Case 6
  85.                         strWord = strWord & "๖"
  86.                     Case 7
  87.                         strWord = strWord & "๗"
  88.                     Case 8
  89.                         strWord = strWord & "๘"
  90.                     Case 9
  91.                         strWord = strWord & "๙"
  92.                 End Select
  93.             Next
  94.             If Cnt <> UBound(p) Then strWord = strWord & "/"
  95.         Next
  96.         Return strWord
  97.     End Function

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


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

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

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

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

0

กระทู้

5

โพสต์

37

เครดิต

Newbie

Rank: 1

เครดิต
37
โพสต์ 2019-6-18 18:13:26 | ดูโพสต์ทั้งหมด

ตามมาอ่าน

0

กระทู้

3

โพสต์

60

เครดิต

Member

Rank: 2

เครดิต
60
โพสต์ 2023-10-23 09:25:06 | ดูโพสต์ทั้งหมด

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

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

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

GMT+7, 2024-11-27 21:30 , Processed in 0.297501 second(s), 4 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

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