Visual Basic Foro

General => Códigos - Aportes - Recursos => Mensaje iniciado por: Waldo en Diciembre 17, 2013, 03:43:37 pm

Título: Clase para crear lista de items agrupados
Publicado por: Waldo 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