I have something like this:
Public Function ItemsToBePrinted()
Dim p_dt As DataTable = Model_Query(2)
Dim p_str As String = ""
Dim StringToPrint As String = ""
For Each drow As DataRow In p_dt.Rows
Dim str_itemName As New String(drow.Item("item_name").ToString)
Dim str_itemQty As New String(drow.Item("item_qty").ToString)
Dim str_itemUnitPrice As New String(drow.Item("item_unitprice").ToString)
Dim str_itemDisc As New String(drow.Item("item_disamt").ToString)
Dim str_itemTotalAmt As New String(drow.Item("item_totamt").ToString)
Dim lineLen1 As String = str_itemName.Length
Dim lineLen2 As String = str_itemQty.Length
Dim lineLen3 As String = str_itemUnitPrice.Length
Dim lineLen4 As String = str_itemDisc.Length
Dim spcLen1 As New String(" "c, 20 - lineLen1)
Dim spcLen2 As New String(" "c, 5 - lineLen2)
Dim spcLen3 As New String(" "c, 5 - lineLen3)
Dim spcLen4 As New String(" "c, 8 - lineLen4)
If drow.Item("item_disamt") = 0 Then
StringToPrint = $"{str_itemName}{spcLen1}{str_itemQty}{spcLen2}{str_itemUnitPrice}{spcLen3}{spcLen4}{str_itemTotalAmt}"
Else
StringToPrint = $"{str_itemName}{spcLen1}{str_itemQty}{spcLen2}{str_itemUnitPrice}{spcLen3}{str_itemDisc}{spcLen4}{str_itemTotalAmt}"
End If
p_str &= StringToPrint & Environment.NewLine
Next
Return p_str
End Function
Public Sub PrintDocument1_PrintPage(ByVal sender As System.Object, ByVal e As System.Drawing.Printing.PrintPageEventArgs) Handles PrintDocument1.PrintPage
Dim p_font As Font = New Font("Consolas", 10)
e.Graphics.DrawString(PrintItemHeader(), p_font, Brushes.Black, 2 * 8, 305)
e.Graphics.DrawLine(p_pen, 16, 340, 350, 340)
e.Graphics.DrawString(ItemsToBePrinted(), p_font, Brushes.Black, 2 * 8, 345)
Currently Im using the spcLen to count the space to make them align to left but I have no idea how to change alignment to right...
Here is the output:
How can I align the dot like this? All the data will align to right except Item Code
Item Code Qty Unit Disc Amount
Price
----------------------------------------------
XXXX 33 4.70 155.10
XXXX 2 3.00 6.00
XXXX 2 9.00 1.80 16.20
XXXX 1 7.50 7.50
XXXX 11 12.00 10.00 122.00
When you have to print the numeric columns you should put the spaces before the number and not after it because you want them aligned on the right
I would write a simple method that aligns your columns data on the right or on the left according to the space and the alignment required.
Now you can call this method in this way
Of course you should remove all your space's calcs inside the loop and this coding will also remove the need of an If to skip the missing discount field