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,






lunes, 8 de junio de 2015

Entity Framework:No aparecen las entidades relacionadas al hacer binding

Hola a todos,

Esto es algo que se puede encontrar cualquiera, y que prefiero dejaros una solución.

Pongamos el caso.
Hacemos un modelo EF (en mi caso EF 6.1.3) con tablas relacionadas.
Creo un formulario donde pongo un BindingSource y su Datasource le añado el tipo de objeto del Entity Framework.
Acto seguido, añado otro BindingSource para gestionar la otra tabla relacionada, añadimos en el datasource el BindingSource primero que hemos puesto, y desplegamos el dataMember para seleccionar la otra tabla relacionada, y sorpresa!!, no nos muestra nada!!!

Bien, si este es vuestro caso, os aporto una posible solución.

Primero de todo, las referencias.
- Añadir en los nombres importados la referencia de System.Collections.ObjectModel.

Y ahora viene los pasos.
El motivo es que los objetos de la tabla relacionada no aparecen es que es posible que no os lo haya puesto el EF como un lista de tipo observable.

Tenéis que abrir el archivo .tt (según el nombre le hayais puesto al EF).
- Buscáis y remplazáis todas las coincidencias de ICollection por ObservableListSource.
- Luego buscais las coincidencias de HashSet. Encontrareis dos, pues bien, modificar la primera (y solo la primera) también por un ObservableListSource.

Una vez guardéis, os regenerará las clases del entity framework y ya os debería aparecer en el bindingSource.datamember disponible para seleccionar.

Esta solución ha sido sacada a partir de la documentación del Entity framework de esta web (con alguna modificación mía):


https://msdn.microsoft.com/en-us/data/jj682076.aspx  

Double-click on the ProductModel.tt file to open it in the Visual Studio editor
  Find and replace the two occurrences of “ICollection” with “ObservableListSource”. These are located at approximately lines 296 and 484.
  Find and replace the first occurrence of “HashSet” with “ObservableListSource”. This occurrence is located at approximately line 50. Do not replace the second occurrence of HashSet found later in the code.
  Save the ProductModel.tt file. This should cause the code for entities to be regenerated. If the code does not regenerate automatically, then right click on ProductModel.tt and choose “Run Custom Tool”.



jueves, 30 de abril de 2015

Lista de CSS para diseñar tablas.

Este es un recurso muy viejo que tengo guardado pero que más de una vez me ha salvado.

Pongamonos en situación. Estamos ante una web que hay que hacer rápidamente, no disponemos para el proyecto de controles de pago y únicamente disponemos de los controles estandar HTML. Pero para empeorar la situación, el cliente nos pide que sea bonito el grid de datos que le has de mostrar ...

Bien, pues os dejo aqui un link muy interesante con varios diseños en CSS muy sencillos pero que os pueden ayudar en un caso de emergencia. (Ya os he comentado que son diseños viejos, pero es que hacía años que tenía este link guardado que he querido compartir).

http://icant.co.uk/csstablegallery/tables/98.php

Renderizar o generar archivo PDF desde una Windows Store App

Buenas a todos,

Otra de estas cosas que no se te ocurre mirar hasta que un cliente te lo pide, como conseguir renderizar un documento pdf de forma dinámica desde una aplicación de Windows 8.

Esto nos puede servir para generar documentos que puedan ser por ejemplo una receta médica, un informe fiscal, o cualquier otro documento que puedas necesitar en versión pdf para que después puedas añadirle una firma electrónica.

No os doy más la murga y os dejo el link explicativo:

https://msdn.microsoft.com/en-us/magazine/dn532207.aspx

Informes RDLC MultiLenguaje (Localización)

Hola a todos,

La mayoría de aplicaciones que solemos hacer son en un único idioma, con lo que nos miramos pocos el tema de la localización en nuestros programas.

No voy a explicar como hacer una aplicación a multi-idioma, ya que es algo bastante trivial para cualquier programador de .NET. Pero os podeis encontrar con que esteis acostumbrados a usar crystal reports y en un proyecto dado tenéis que usar RDLC para mostrar los informes. Y además hay que hacerlo en multi-idioma.

Pues sin problemas, os dejo un link que nos cuenta el proceso para poder configurar los informes en multi-idioma de forma sencilla.

https://marcelwouters.wordpress.com/2011/06/08/localization-multi-language-of-a-rdlc-report-with-microsoft-reportviewer/

Optimizaciones para EF4 - EF5- EF6 (Entity Framework 4-5-6)

Una de las primeras cosas que miras cuando te decides a probar LinqToSQL o un Entity Framework son el rendimiento de estas nuevas tecnologías. De nada nos sirve todo si luego resulta que es muy lento, o en cuanto tengamos  algunos miles de resultados se nos resiente el dispositivo.

Por ese motivo, en su momento busque información de estos temas y me guardé este link entre los favoritos que espero le pueda ser útil a más gente.

https://msdn.microsoft.com/en-us/data/hh949853.aspx

Como crear un entorno empresarial para Windows Phone 8:

Una de las primeras cosas que nos sorprendió con Windows 8 era su tienda de aplicaciones. Si hacías una aplicación de Windows 8 estás obligado a pasar por su tienda, con lo que me salió una de las primeras dudas respecto a este tema.

¿Y que hacemos si estamos programando aplicaciones para uso interno de una empresa?

Si esta es vuestra situación, no pasa nada, hay solución. No gratis, pero tiene solución.
Os dejo un link de una web donde explican como crear un entorno empresarial donde publicar vuestras aplicaciones. Esto significa que únicamente los dispositivos que estén en vuestro dominio podrán acceder a vuestra propia tienda de aplicaciones.

http://javiersuarezruiz.wordpress.com/2013/04/29/windows-phone-8-distribucion-empresarial/

Hay otras formas, como por ejemplo poner desde el dominio a los dispositivos la licencia de desarrollador y de esta manera poderles enviar la aplicación sin tener que hacer todo esto. Pero digamos que esta forma ya no es tan ética ni segura.