Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Formato en columnas de Listview

Estas en el tema de Formato en columnas de Listview en el foro de Visual Basic clásico en Foros del Web. Necesito ponerle formato a los campos numericos de un listview, utilizo una funcion que encontre para cargar un recordset, los campos numericos son precio y ...
  #1 (permalink)  
Antiguo 30/11/2009, 21:38
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Formato en columnas de Listview

Necesito ponerle formato a los campos numericos de un listview, utilizo una funcion que encontre para cargar un recordset, los campos numericos son precio y precio2 dejo el codigo que tengo y si tienen otro que funciona mejor estaria bien.
Código:
Sub Cargar_ListView(ListView As ListView, sql As String, PathBd As String)

    Dim Campo As Integer

    On Error GoTo ErrSub

    'Variable para los SubItem del LV
    Dim Item As ListItem
    Dim i As Long

    'Nuevo objeto Connection y objeto Recordset
    Set cnn = New Connection
    Set Rst = New Recordset

    'Abre la base de datos
    cnn.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & PathBd)

    'Llena el Recordset
    Rst.Open sql, cnn, adOpenDynamic, adLockOptimistic
    
    With ListView
        'Vista de reporte
        .View = lvwReport
        ' Elimina los item y los encabezado de columna
        .ListItems.Clear
        .ColumnHeaders.Clear
    End With

    Me.MousePointer = vbHourglass

    'Agrega los nombres campo junto con los encabezados de columna para el ListView
    'For Campo = 0 To Rst.Fields.Count - 1
        'ListView.ColumnHeaders.Add , , Rst.Fields(Campo).Name
    'Next
ListView.ColumnHeaders.Add , , "codigo", 1000
ListView.ColumnHeaders.Add , , "nombre", 4000
ListView.ColumnHeaders.Add , , "precio", 1000, lvwColumnRight
ListView.ColumnHeaders.Add , , "precio2", 1000, lvwColumnRight

    ' Recorre todos los registros del Recordset
    While Not Rst.EOF
        'Agrega el Item
        Set Item = ListView.ListItems.Add(, , Rst.Fields(0), , 1)
        i = 1

        'Agrega los SubItem al ListView mediante la variable ITEM
        For Campo = 1 To Rst.Fields.Count - 1
    
            'si el dato no es de tipo Null lo agrega
            If Not IsNull(Rst.Fields(Campo)) Then
                Item.SubItems(i) = Rst.Fields(Campo)
            End If
            i = i + 1
        Next
    
    'Siguiente registro
    Rst.MoveNext
    Wend
    Me.MousePointer = vbDefault

Exit Sub
'Error
ErrSub:

    MsgBox Err.Description, vbCritical, "Error"
    Me.MousePointer = vbDefault
End Sub
  #2 (permalink)  
Antiguo 01/12/2009, 06:08
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Formato en columnas de Listview

Para resumir te hago una sub

Código :
Ver original
  1. Sub CambiaFormatoColumna(ByRef ControlListView As ListView, ByVal NumColumna As Integer, ByVal NuevoFormato As Variant)
  2.   Dim F As Long
  3.   For F = 1 To ControlListView.ListItems.Count   ' - 1  'Parece ser que si pongo -1 se queda el ultimo sin cambiar
  4.     ControlListView.ListItems(F).ListSubItems(NumColumna).Text = Format(ControlListView.ListItems(F).ListSubItems(NumColumna).Text, NuevoFormato)
  5.   Next F
  6. End Sub

Para usarla añade en tu código detrás del Wend:

CambiaFormatoColumna ListView, 2, "00,000"
CambiaFormatoColumna ListView, 3, "00,000"

cambiando el "00,000" por tu formato

Espero que te sirva.
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!

Última edición por pkj; 02/12/2009 a las 02:44
  #3 (permalink)  
Antiguo 01/12/2009, 10:26
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Formato en columnas de Listview

Hola!!
Un poco mas corto:
En la linea donde cargas los datos:

'si el dato no es de tipo Null lo agrega
If Not IsNull(Rst.Fields(Campo)) Then
if Rst.Fields(Campo).name="precio" or Rst.Fields(Campo).name="precio2" then
Item.SubItems(i) = FormatNumber(Rst.Fields(Campo).Value, 2)
else
Item.SubItems(i) = Rst.Fields(Campo)
endif
End If
  #4 (permalink)  
Antiguo 01/12/2009, 18:05
 
Fecha de Ingreso: enero-2008
Ubicación: Lima - Perú
Mensajes: 1.127
Antigüedad: 16 años, 3 meses
Puntos: 10
Respuesta: Formato en columnas de Listview

Muy bueno ambas corren perfectamente.
Tengo otra consulta si quiero cargar las cabeceras automaticamente, como hago para colocarle el ancho y alineacion a cada una de ellas.
Manualmente esta asi:
Código:
ListView.ColumnHeaders.Add , , "precio", 1000, lvwColumnRight
Y de esta forma no tengo esa posibilidad, que recomiendan?

Código:
For Campo = 0 To Rst.Fields.Count - 1
     ListView.ColumnHeaders.Add , , Rst.Fields(Campo).Name
Next
  #5 (permalink)  
Antiguo 01/12/2009, 20:43
Avatar de lokoman  
Fecha de Ingreso: septiembre-2009
Mensajes: 502
Antigüedad: 14 años, 7 meses
Puntos: 47
Respuesta: Formato en columnas de Listview

Es igual, solo pon los parametros que faltan:

For Campo = 0 To Rst.Fields.Count - 1
if Campo=0 then
ListView.ColumnHeaders.Add , , Rst.Fields(Campo).Name, 1000, lvwColumnLeft ' La primera siempre es a la izquierda
Else
ListView.ColumnHeaders.Add , , Rst.Fields(Campo).Name, 1000, lvwColumnRight ' La segunda lo que quieras
end if
Next
  #6 (permalink)  
Antiguo 02/12/2009, 02:47
Avatar de pkj
pkj
 
Fecha de Ingreso: julio-2006
Ubicación: Órbita sincrónica
Mensajes: 899
Antigüedad: 17 años, 9 meses
Puntos: 29
Respuesta: Formato en columnas de Listview

Para cambiar el ancho de la columna 1:

ListView.ColumnHeaders(1).Width = 3000
__________________
No hay preguntas tontas, solo gente estup..., ¡No!, ¿como era? No hay gente que pregunte a tontos... ¡Nooo!... ¡Vaya cabeza!
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:53.