2016-12-29 2 views
0
Druck

ich so etwas wie diese:Wie Punkt in der Währung auszurichten, während

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) 

Derzeit Im den spcLen mit dem Raum zu zählen, um sie nach links zu machen ausrichten, aber ich habe keine Ahnung, wie die Ausrichtung nach rechts ändern ...

Hier ist die Ausgabe:

output

Wie kann ich den Punkt wie folgt ausrichten? Alle Daten werden nach rechts, außer Item Code ausrichten

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 
+0

@Steve Ich denke Consolas ist eine Schriftart mit fester Breite? http://graphicdesign.stackexchange.com/questions/13148/which-fonts-have-the-same-width-for-every-character – vbnewbie

+0

Richtig, ich habe nicht die Schriftart Erklärung – Steve

Antwort

1

Wenn Sie die numerischen Spalten gedruckt werden, müssen Sie die Räume vor der Nummer setzen sollte und nicht nach, weil Sie sie auf der rechten Seite

I ausgerichtet werden sollen würde eine einfache Methode schreiben, die die Daten Ihrer Spalten rechts oder links entsprechend dem benötigten Platz und der Ausrichtung ausrichtet.

Function AlignText(text As String, TotalSpace As Integer, AlignRight As Boolean) 

    Dim alignResult As String 

    if string.IsNullOrEmpty Then 
     alignResult = new String(" "c, TotalSpace) 
    Else 
     if text.Length > TotalSpace Then 
      text = text.SubString(0, TotalSpace) 
     End If 
     If AlignRight Then 
      alignResult = New String(" "c, TotalSpace - text.Length) & text 
     Else 
      alignResult = text & New String(" "c, TotalSpace - text.Length) 
     End If 
    End If 
    Return alignResult 
End Function 

Jetzt können Sie diese Methode auf diese Weise rufen

Dim str_itemName = AlignText(drow.Item("item_name").ToString, 20, False) 
Dim str_itemQty = AlignText(drow.Item("item_qty").ToString, 3, True) 
Dim str_itemUnitPrice = AlignText(drow.Item("item_unitprice").ToString, 10, True) 
Dim str_itemDisc = AlignText(drow.Item("item_disamt").ToString), 10, True) 
Dim str_itemTotalAmt = AlignText(drow.Item("item_totamt").ToString), 10, True) 

Natürlich sollten Sie alle Ihres Raum entfernen calcs innerhalb der Schleife und diese Codierung wird auch die Notwendigkeit eines Falls entfernen Sie die fehlenden überspringen Rabattfeld

+0

Dank, es funktioniert !!! – vbnewbie