none
separadores de miles en impresion con printdocument RRS feed

  • Pregunta

  • buenas;

    mi consulta es la sgte tengo totales generados por guias de despacho las cuales se van sumando, hasta que el cliente decide facturarlas, el problema es que esos totales salen sin punto separador de miles, para no enredarme mas con el tema queria colocar el formato en el momento de la impresion en el printdocument, pero he tratado y no encuentro la forma de hacerlo mientras va imprimiendo.

    este es un ejemplo de la linea de impresion:

                

     For indexprint As Integer = 1 To contadordata2

                'e.Graphics.DrawString((DataGridView1.Item(0, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 30, sizecod)
                e.Graphics.DrawString((DataGridView1.Item(7, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 85, sizecod) 'Cantidad
                e.Graphics.DrawString((DataGridView1.Item(3, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 190, sizecod) 'Descripcion
                e.Graphics.DrawString((DataGridView1.Item(4, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 390, sizecod) 'Tipo Unidad
                e.Graphics.DrawString((DataGridView1.Item(5, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 560, sizecod) 'Precio Venta

    esta es la linea de los totales:            

    e.Graphics.DrawString((DataGridView1.Item(11, (indexprint - 1)).Value), New Font("Verdana", 10, FontStyle.Regular), System.Drawing.Brushes.Black, 700, sizecod) ' total
                sizecod = sizecod + 20

            Next

    les agradeceria guia y ayuda.

    Atte.

    Felipe Soto


    domingo, 21 de septiembre de 2014 7:28

Respuestas

  • Usas el especificador de formato "N" para tener una representación del valor con separadores decimales.

    Todo dependerá del tipo del objeto contenido en value. Si es un tipo numérico, haces

    DataGridView1.Item(11, (indexprint - 1)).Value.ToString("N0")

    si es un tipo string

    CInt(DataGridView1.Item(11, (indexprint - 1)).Value).ToString("N0")

    Por supuesto, si es un Double haras CDbl() y así. Si quieres decimales "N2" ó "N7".


    [W]

    domingo, 21 de septiembre de 2014 13:41
  • Puedes definir la alineación del texto con StringFormat.

    En el ejemplo uso una tipografía monoespaciada para los números.

    Public Class Form1
    
        Dim datos As List(Of Tuple(Of String, Integer))
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            datos = New List(Of Tuple(Of String, Integer))
    
            datos.Add(New Tuple(Of String, Integer)("aaaaaa", 29000))
            datos.Add(New Tuple(Of String, Integer)("bbbbbbbbbbbbb", 2900))
            datos.Add(New Tuple(Of String, Integer)("cccccccccc", 8475365))
    
        End Sub
    
        Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    
            Dim posY = 5
            Dim alto As Integer = CInt(e.Graphics.MeasureString("MMM", Me.Font, 1000).Height)
            Dim mono As Font = New Font(FontFamily.GenericMonospace, Me.Font.SizeInPoints)
            Dim sf As StringFormat = New StringFormat() With {.Alignment = StringAlignment.Far}
    
            For Each item As Tuple(Of String, Integer) In datos
                e.Graphics.DrawString(item.Item1, Font, Brushes.Brown, 5, posY)
                e.Graphics.DrawString(item.Item2.ToString("N0"), mono, Brushes.CadetBlue, 240, posY, sf)
    
                posY += alto
            Next
    
            mono.Dispose()
        End Sub
    End Class

    Fijate que las coordenadas para el string numérico, se refieren al extremo derecho. La cadena se expande desde allí hacia la izquierda.


    [W]





    • Editado [Walter] martes, 23 de septiembre de 2014 1:17
    • Marcado como respuesta Felipe Soto Herrera miércoles, 29 de julio de 2015 3:56
    lunes, 22 de septiembre de 2014 21:30

Todas las respuestas

  • Usas el especificador de formato "N" para tener una representación del valor con separadores decimales.

    Todo dependerá del tipo del objeto contenido en value. Si es un tipo numérico, haces

    DataGridView1.Item(11, (indexprint - 1)).Value.ToString("N0")

    si es un tipo string

    CInt(DataGridView1.Item(11, (indexprint - 1)).Value).ToString("N0")

    Por supuesto, si es un Double haras CDbl() y así. Si quieres decimales "N2" ó "N7".


    [W]

    domingo, 21 de septiembre de 2014 13:41
  • Muchas gracias probe los que indicaste walter y me resulto perfecto, aprovecho de preguntarte si se puede hacer algo con la posicion por ejemplo:

    29.900

    2.900

    asi sale ahora y lo que me gustaria es que salga siendo el punto separador de miles como referencia de orden por ejemplo:

    29.900

      2.900

    no se si me doy a entender bien...

    lunes, 22 de septiembre de 2014 18:08
  • Puedes definir la alineación del texto con StringFormat.

    En el ejemplo uso una tipografía monoespaciada para los números.

    Public Class Form1
    
        Dim datos As List(Of Tuple(Of String, Integer))
    
        Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
            datos = New List(Of Tuple(Of String, Integer))
    
            datos.Add(New Tuple(Of String, Integer)("aaaaaa", 29000))
            datos.Add(New Tuple(Of String, Integer)("bbbbbbbbbbbbb", 2900))
            datos.Add(New Tuple(Of String, Integer)("cccccccccc", 8475365))
    
        End Sub
    
        Private Sub Form1_Paint(sender As System.Object, e As System.Windows.Forms.PaintEventArgs) Handles MyBase.Paint
    
            Dim posY = 5
            Dim alto As Integer = CInt(e.Graphics.MeasureString("MMM", Me.Font, 1000).Height)
            Dim mono As Font = New Font(FontFamily.GenericMonospace, Me.Font.SizeInPoints)
            Dim sf As StringFormat = New StringFormat() With {.Alignment = StringAlignment.Far}
    
            For Each item As Tuple(Of String, Integer) In datos
                e.Graphics.DrawString(item.Item1, Font, Brushes.Brown, 5, posY)
                e.Graphics.DrawString(item.Item2.ToString("N0"), mono, Brushes.CadetBlue, 240, posY, sf)
    
                posY += alto
            Next
    
            mono.Dispose()
        End Sub
    End Class

    Fijate que las coordenadas para el string numérico, se refieren al extremo derecho. La cadena se expande desde allí hacia la izquierda.


    [W]





    • Editado [Walter] martes, 23 de septiembre de 2014 1:17
    • Marcado como respuesta Felipe Soto Herrera miércoles, 29 de julio de 2015 3:56
    lunes, 22 de septiembre de 2014 21:30