martes, 9 de junio de 2015

Pasar los valores de un Enum a un BindingSource

Hola a todos,

Hoy os dejo un código que he usado mucho tiempo, pero que estoy seguro que puede ser útil a mucha gente.

Tanto si estamos trabajando con Entity Framework, LinqToSQL o incluso con ADONet, siempre acabamos necesitando ligar unos datos en un combobox u otro control con los datos que tenemos en un Enum.

Mi forma de trabajar es que siempre los controles han de ir conectados a un BindingSource, aunque estos sean valores fijos de un enum, Y por esto os dejo el código utilizado.

Primero, definimos el enum (Lo haré en Visual Basic, pero es fácilmente exportable a C#)

 Public Enum TipoEnum
        MiValor1 = 0
        MiValor2 = 1
        MiValor3 = 2
        MiValor4 = 3
 End Enum


Ahora es cuando me creo una función Shared (Static en c#) donde una vez le paso el tipo del enumerado me devolverá una lista de elementos que podremos asignar al bindingSource.
Pero primero creo la la clase de elementos que usaremos.

Public Class keypairvalueEnum
    Public Property Key As Integer
    Public Property Value As String
 
    Public Sub New(ByVal mykey As IntegerByVal myvalue As String)
        Key = mykey
        Value = myvalue
    End Sub
End Class

Como veis solo creo una clase con dos propiedades que serán mi clave y valor.
Ahora ya puedo crear la función que me devolverá la lista de elementos.

Public Shared Function EnumeradoKeyPairValue(ByVal tipo As TypeAs List(Of keypairvalueEnum)
        Dim ret As New List(Of keypairvalueEnum)
        For Each x In [Enum].GetValues(tipo)
            Dim txt As String = SpaceInCapitalString(x.ToString())
            ret.Add(New keypairvalueEnum(x, txt))
        Next
        Return ret
    End Function
 
    Public Shared Function SpaceInCapitalString(ByVal txt As StringAs String
        Return System.Text.RegularExpressions.Regex.Replace(txt, "[A-Z]"" $0").Trim()        End Function

Veis que hay dos funciones, la primera es la que nos devuelve ese listado que estamos hablando todo el rato, pero la segunda es también importante, ya que nos devuelve los textos formateados correctamente. Que quiero decir con correctamente?,  bueno, que nos interesa que muestre el control, un valor de tipo "MiValor1" o de tipo "Mi Valor1"?. Supongo que os interesará que nos añada un espacio justo antes de cada mayúscula, y de esta manera mostrar no sólo una palabra, sino lo que necesitemos en cada momento... Pues aquí tenéis la forma.

Ya solo falta usar esta función en el formulario:

BindingSource1.DataSource = Enumerados.EnumeradoKeyPairValue(GetType(Enumerados.TipoEnum))

Y ya lo tenemos todo hecho. Espero os sea útil este artículo a todos.
Un saludo,






No hay comentarios:

Publicar un comentario