miércoles, 25 de enero de 2012

Acceso a Datos - Mi primer Entity Framework II - MySQL

En este post encontramos una aclaracion de lo unico que hay que hacer para usar esta magnifica tecnología como es ADO.NET Entity Framework, con otras fuentes de datos u otros motores. Para esta ocasión prepare un ejemplo usando la misma tabla de mi anterior post pero montada en MySQL, tenemos que buscar en nuestro proveedor un conecto universal o un conector como en el caso de MySQL un conector destinado a .NET exclusivamente, esto permitirá que se tenga un controlador de conexión del motor como proveedor de datos para toda la plataforma de desarrollo .NET. Una vez instalado seguimos estos pasos:


Seleccionamos cambiar el origen de datos:


Esto nos dirigen a una pantalla que nos muestra ahora a MySQL como proveedor de datos reconocible para .NET, llenamos los datos de configuración del motor y finalizamos el proceso para que la cadena de conexión sea almacenada en el archivo de configuración del proyecto.




Finalmente seguimos con los pasos de nuestro proyecto, un ejemplo de que se puede hacer lo encontraras en mi anterior post, donde creamos y modificamos los registros a la BD y a partir de ahora vemos que el origen de datos no es tan relevante, y que los datos como complemente del lenguaje, comportándose como objetos es una muy buena técnica y te ayudara en la solución de tus nuevos proyectos.que no importa el origen de los datos.




Descargar Fuente


Saludos y gracias.
JamC.

Acceso a Datos - Mi primer Entity Framework - SQL Server

Como parte de nuestro aprendizaje encontramos una brecha entre la programación y los datos, conceptualmente siempre nos la enseñan como materias separadas, bueno hasta hay todo bien, el nivel de profundidad de cada una da para que sean cursadas de esta forma, pero bueno, y ahora amigo mio estas en la vida real, estas de desarrollador, lo primero que piensas es, trabajar la programación de la aplicación con C#, VB.net y el mundo de los datos con sentencias SQL. Ok, errores en compilación, tengo que saber dos ‘cosas’ por separado?… Bueno pues a esta distancia ya se le ha encontrado mas de una manera de realizar la unión aquí es donde entra el concepto de O/RM, esta es la técnica que nos va permitir dejar las preocupaciones de uno solo de nuestros lados como desarrolladores, o sea en mundo de la programación de la aplicación, esto se debe a que creamos nuestros datos como tipos, en otras palabras orientamos la programación a objetos (los datos ahora son objetos), que poderoso concepto este, ahora sigo con mi único paradigma, la programación orientada a objetos, seguimos en C# porque nuestras sentencias de datos ahora son extensiones del lenguaje, lo cual hereda beneficios del lenguaje como depuración en tiempo real de la sentencia de afectación de datos, entre otras. La reducción en la cantidad de código, de procesos y de ‘problemas’ comunes que tenemos con el ADO.NET como usar la API sus comandos SqlConnection, SqlCommand, SqlReader, Dataset y Datatable, aunque muy poderosa y efectiva sigue siento muy extenso y tedioso la creación y depuración de la aplicación utilizando estos métodos clásicos.
Después de esta corta introducción, me gustaría que exploraramos un ejemplo de que es lo que vamos a encontrar y también que profundicen mas sobre los conceptos y los fundamentos, para que puedan ampliar la visual de este tema tan interesante y sumamente útil, para nosotros los desarrolladores de software. Link1, link2.

Bueno ahora entremos en materia, hagamos un ejemplo simple para poder acceder a los datos, como el cabecero dice usaremos el motor de datos SQL Server, en la cual pues en mi caso tengo creada una base de datos relacional que uso para mis ejemplo llamada mcsdb, en esta creo una tabla 'contactoSimple' con estas características:
Finalmente creamos un nuevo proyecto de Windows, ya sea un Windows Forms o un WPF, depende de su comodidad, para realizar esta practica. Ok en las diapositivas pueden observar los pasos y las explicaciones de los mismos.




Les recomiendo que estudien LINQ, para que entiendan las sentencias que pueden realizar. En el blog JRamierezDev, podran encontrar mas información del tema LINQ.



Saludos y Gracias
JamC


Columnas Especificas DataGridView


En el trabajo con el control del Datagridview encontramos cierta necesidad a cubrir, como que solo permita edición unas columnas y otras no, los focos ubicados específicamente en una columna.
Estas dos preguntas se les darán solución con nuestro ejemplo que se encuentra descargable la fuente en la parte inferior de este post, cabe agradecerles y esperar que les sea de utilidad.
Creamos nuestra Aplicación en visual Studio 2010, es una aplicación de escritorio y llamamos nuestro formulario frPrincipal.


Agregamos un control Datagridview y empezamos a modificar sus propiedades. Encontramos EditMode la cual especifica cómo se va a realizar la edición de las celdas. Para nuestra necesidad la vamos a programar nosotros entonces usamos Datagridview.EditMode = EditProgrammatically;



Una vez modificada esta propiedad, la forma de modificar las celdas anteriormente utilizadas no son permitidas (F2 y/o doble clic sobre la celda). Se crearon manualmente las columnas para tenerlas en el diseñador.


Para efectos de este ejemplo vamos a crear 4 columnas y 5 registros (5 filas), en la propiedad columns del control encontramos la pantalla que nos permite realizar la creación de ID, Nombre, Costo, Existencias.

Los datos de este ejemplo se llenan manualmente con estas líneas de código.




Ya tenemos nuestra aplicación con los datos cargados.
  


Ahora tenemos queremos que cuando le de clic en las columnas Nombre y Existencias, estas se habiliten para su edición, pero queremos mantener Id y Costo como “No editables”.

Usamos el evento CellClick que tiene lugar cuando se da clic en cualquier parte de la celda para poder llevar a cabo nuestra tarea. Entonces tenemos:



Para saber la posición en la que se dio clic usamos una variable para alojar la fila en donde se desato el evento y ponemos la condición que si no se está efectuando en las columnas permitidas este evento no tenga efecto y no se ponga editable, pero si está en una de las columnas editables usamos la propiedad BeginEdit(true) para poner la celda especifica en modo editable.

En el punto de la pregunta que decía que quería una modificación vertical para evitar errores del usuario tenemos que usar el evento KeyUp del datagridview para que una vez el Enter sea “soltado” por el usuario, se posicione en la fila siguiente en un sentido descendente.



Para esto usamos una condición para saber si se están presionando las teclas que vamos habilitar para la validación del movimiento.

Finalmente movernos entre las dos columnas que nos interesa editar usamos en evento KeyDown del datagridview para que tan pronto sea presionado haga lo que necesitamos y no se preste para otro evento no deseado.


Tenemos una matriz con unos parámetros específicos de funcionamiento y vamos a controlar que se lleva a cabo en nuestro control.



Descargar Fuente


Saludos y Gracias.
JamC.

lunes, 23 de enero de 2012

Formularios Ocultos

Si se está iniciando con Windows Forms y C#, y además usamos varios formularios, usamos métodos y propiedades de estos para llegar a nuestro fin, bueno pues la pregunta que surge en C# es como llamo nuevamente el formulario hijo que está oculto desde el padre.
Con este ejemplo vamos a darle solución, partiendo que tenemos un formulario padre y dos hijos de los cuales uno va a ser oculto momentáneamente, pero no queremos inicializarlo nuevamente para no “perder” los datos que están en sus controles.


Para nuestro formulario múltiple tenemos estas líneas de código que genera muchas veces el mismo formulario y no tiene un mayor efecto que marcar una diferencia con nuestro formulario controlado.

Creamos un proyecto con un formulario principal que va ser nuestro padre o nuestra interfaz de múltiples documentos, en el cual tenemos dos formularios uno que va a ser declarado nuevo cada vez que se presione el botón, y otro que va a tener dos estados en el botón que lo llama, si no está abierto, lo crea nuevo, pero si está oculto lo permite ver y si está abierto y visible lo cierra.


Para el trabajo con nuestro formulario “único”, tenemos que entender que es lo que hace Hide(), este método oculta el control del usuario seria un equivalente a la propiedad visible = false, pero haciendo referencia a un método no a una propiedad, su contrario sería show(). 


Si se tiene ya iniciado el formulario y no está oculto (Hide) lo que hace es que lo cierra, para que pueda ser nuevamente llamado como uno nuevo, pero esto implica que todos los datos que están en los controles y no han sido guardados en ningún storage apropiado se perderán, para saber si esta creado nos podemos ayudar de la propiedad isHandlecreated, esta propiedad es un booleano, así que nos devuelve o una respuesta positiva (true) o una negativa (false), lo que nos dice es que si ha sido asociado algún manejador, si ya fueron creados todos sus eventos, y esta activo, cuando la respuesta es positiva se cierra nuestro formulario.
Así obtenemos un formulario padre y dos hijos con distinta formas de llamarlos y visualizarlos.




Descargar Fuente


Saludos y Gracias.
JamC.