Autor Tema: LISTVIEW VB6 CON ENCABEZADO AUTOMATICO  (Leído 3251 veces)

0 Usuarios y 1 Visitante están viendo este tema.

obethermy

  • Megabyte
  • ***
  • Mensajes: 116
  • Reputación: +6/-7
    • Ver Perfil
LISTVIEW VB6 CON ENCABEZADO AUTOMATICO
« en: Octubre 30, 2015, 02:31:36 pm »
Código: (VB) [Seleccionar]
Public Sub CargarListView(LV As ListView, rs As ADODB.Recordset, Campos As Integer)
    Dim i As Long
    Dim Columna As Integer
    Dim X As Integer, Y As Integer
    Dim Ancho As Long
    LV.Sorted = False
    On Error GoTo ErrorSub
    With LV
    .Refresh
    .ListItems.Clear ' elimina todos los datos
    .ColumnHeaders.Clear ' elimina los encabezados
    .View = lvwReport 'vista de reporte
    '.FlatScrollBar = True 'si la barra de desplazamiento aparece plana
    .FullRowSelect = True 'determina si al seleccionar un elemento en la vista detalle, se selecciona la fila completamente
    .GridLines = True 'linea en las filas y columnas
    .HideSelection = False 'si el elemento seleccionado se mostrara como seleccionado cuando el listview pierde enfoque
    .LabelEdit = lvwManual 'si un usuario puede modificar la etiqueta listitem o node
    .BorderStyle = ccNone 'estilo de bordes
    .Font.Name = "Verdana" 'fondo de letra verdana
    .Font.Size = 8 'tamaño de la letra
    .Appearance = ccFlat 'apariencia 3d
    .TabStop = False ' si se usara tab para desplazarce
    .ForeColor = vbBlack ' color de la letra
    End With
    ' recorre los campos del recordset _
      para crear las columnas en el Listview
    'For Columna = 0 To rs.Fields.Count - 1
    For Columna = 0 To Campos
         X = rs(Columna).DefinedSize
         Y = Len(rs(Columna).Name)
         If Campos > 0 Then
          If X > Y Then
           If X = 10 Then X = X + 1
           If X = 36 Then X = X - 4
           Ancho = (X * 120)
          Else
           Y = Y + 2
           Ancho = (Y * 120)
          End If
         Else
          Ancho = LV.Width - 259
         End If
         If Columna = Campos Then
          'LV.ColumnHeaders.Add , , UCase(rs(Columna).Name), 3850
          LV.ColumnHeaders.Add , , UCase(rs(Columna).Name), LV.Width
         Else
          LV.ColumnHeaders.Add , , UCase(rs(Columna).Name), Ancho
         End If
         'AutosizeColumns LV
         'Call ShowScrollBar(LV.hWnd, SB_HORZ, False)
    Next
    ' si hay registros
    If rs.RecordCount > 0 Then
     ' Recorre el conjunto de registros  para añadir los items
     While Not rs.EOF
      ' Item
      Set objitem = LV.ListItems.Add(, , rs(0))
      ' subitems
      For i = 1 To LV.ColumnHeaders.Count - 1
        ' verifica que el valor no sea un Null
        If IsNull(rs.Fields(i).value) = False Then
         objitem.SubItems(i) = rs.Fields(i).value
        End If
      Next
      ' Mueve al siguiente registro
      rs.MoveNext
     Wend
    End If
    'limpia el LV
    'LV.ListItems.Clear
    'Call ForeColorColumn(&H8000&, 0, Registro.LV)
    'Call ForeColorColumn(vbRed, 1, Registro.LV)
    Exit Sub
ErrorSub:
   If Err.Number = 94 Then Resume Next
End Sub

obethermy

  • Megabyte
  • ***
  • Mensajes: 116
  • Reputación: +6/-7
    • Ver Perfil
Re:LISTVIEW VB6 CON ENCABEZADO AUTOMATICO
« Respuesta #1 en: Noviembre 02, 2015, 08:21:41 am »
eso va en un modulo.bas

en el form1 creas el recordset
y pones
Call CargarListView(LV, rsch, 1)
lv --> nombre del listview
rsch--> recordset creado
1--> campos a leer como cabecera(son dos recuerden que los recorset se leen el primer registro como 0)