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 Integer, ByVal 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 Type) As 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 String) As 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,