Autor Tema: Clase para crear lista de items agrupados  (Leído 2741 veces)

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

Waldo

  • Gigabyte
  • ****
  • Mensajes: 264
  • Reputación: +22/-0
    • Ver Perfil
Clase para crear lista de items agrupados
« en: Diciembre 17, 2013, 03:43:37 pm »
Les comento, queria crear para una grilla, unos filtros por columna al estilo de Excel ( ahora tambien lo vi en el explorador de win, en las ultimas versiones), donde uno hace un click en el header de la columna y aparece un combo con todos los items contenidos en esa columna, pero obviamente sin repetir items del mismo valor.
Tal vez podia hacer una consulta a la base con un GROUP BY, pero lo queria hacer directamente con lo que ya tenia en la grilla, y bueno jugando un rato salio una clase asi:

cListaGroup.cls
Código: (VB) [Seleccionar]
Option Explicit

Private m_colItems As Collection
Public Sub AddItem(sItem As String)
   
    'ver si ya existe el item en la coleccion
    If ItemExist(sItem) Then
        Exit Sub
    Else
        'No existe, agregar el item a la coleccion
        m_colItems.Add sItem, sItem
    End If

End Sub

Private Function ItemExist(sItem As String) As Boolean

    On Error GoTo myErr
       
    m_colItems.Item (sItem)
    ItemExist = True
   
    Exit Function

myErr:
        ItemExist = False
        Err.Clear
       
End Function

Public Function GetListArray() As String()
   
    Dim arTmp() As String
    ReDim arTmp(m_colItems.Count - 1)
    Dim vItem As Variant
    Dim iX As Integer
   
    For Each vItem In m_colItems
        arTmp(iX) = vItem
        iX = iX + 1
    Next
   
    GetListArray = arTmp

End Function

Private Sub Class_Initialize()
   
    Set m_colItems = New Collection
   
End Sub

Private Sub Class_Terminate()

    Set m_colItems = Nothing

End Sub


El uso es muy basico,
AddItem : agrega un item a la lista, la clase se encarga de ver si lo agrega o ya lo tiene
GetListArray: devuelve un Array string de los valores

Ej:


Código: (VB) [Seleccionar]
Private Sub Command1_Click()
   
    Dim oLista As New cListaGroup
    Dim arList() As String
   
    With oLista
        .AddItem "pepe"
        .AddItem "juan"
        .AddItem "pedro"
        .AddItem "luis"
        .AddItem "juan"
        .AddItem "pepe"
       
        arList = .GetListArray()
    End With
    Set oLista = Nothing
   
    CargarCombo arList
   
End Sub


devuelve:

pepe
juan
pedro
luis