/
XtraReport1.vb
68 lines (55 loc) · 2.28 KB
/
XtraReport1.vb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
Imports System
Imports System.Linq
Imports System.Drawing
Imports System.Collections
Imports System.ComponentModel
Imports DevExpress.XtraReports.UI
Imports DevExpress.DataAccess.Sql
Namespace WindowsFormsApplication1
Partial Public Class XtraReport1
Inherits DevExpress.XtraReports.UI.XtraReport
Public Sub New()
InitializeComponent()
End Sub
Private Sub WordsUnitPrice_GetValue(ByVal sender As Object, ByVal e As GetValueEventArgs) Handles WordsUnitPrice.GetValue
e.Value = NumberToWords(Convert.ToInt32(e.GetColumnValue("UnitPrice")))
End Sub
Public Shared Function NumberToWords(ByVal number As Integer) As String
If number = 0 Then
Return "Zero"
End If
If number < 0 Then
Return "Minus " & NumberToWords(Math.Abs(number))
End If
Dim words As String = ""
If (number \ 1000000) > 0 Then
words &= NumberToWords(number \ 1000000) & " Million "
number = number Mod 1000000
End If
If (number \ 1000) > 0 Then
words &= NumberToWords(number \ 1000) & " Thousand "
number = number Mod 1000
End If
If (number \ 100) > 0 Then
words &= NumberToWords(number \ 100) & " Hundred "
number = number Mod 100
End If
If number > 0 Then
If words <> "" Then
words &= "and "
End If
Dim unitsMap = { "Zero", "One", "Two", "Three", "Four", "Five", "Six", "Seven", "Eight", "Nine", "Ten", "Eleven", "Twelve", "Thirteen", "Fourteen", "Fifteen", "Sixteen", "Seventeen", "Eighteen", "Nineteen" }
Dim tensMap = { "zero", "Ten", "Twenty", "Thirty", "Forty", "Fifty", "Sixty", "Seventy", "Eighty", "Ninety" }
If number < 20 Then
words &= unitsMap(number)
Else
words &= tensMap(number \ 10)
If (number Mod 10) > 0 Then
words &= "-" & unitsMap(number Mod 10)
End If
End If
End If
Return words
End Function
End Class
End Namespace