Nuevas Características de C# 3.0 (Automatically Implemented Properties)

A partir de esta entrada, empezaré una serie de posts donde mencionaré las nuevas características de c# 3.0, con las cuales simplificarás código y te ahorrarás tiempo.

Primero, vamos a hablar de las Automatically Implemented Properties(Propiedades implementadas automáticamente).

Anteriormente, y es común que las propiedades se establezcan de esta forma:

public class Persona
{
    private string nombre;
    private string ciudad;

    public int NOMBRE {
    get { return nombre; }
    set {  = value; } }

    public int CIUDAD {
    get { return ciudad; }
    set { y = value; } }
}

 

como vemos, primero se declaran atributos, en este caso nombre y ciudad, y posteriormente se crean las 2 propiedades correspondientes, ambas de escritura y lectura.

Ahora, en C#, ya no es necesario todo eso, y se simplifica a lo siguiente:

public class Persona
{
    public int NOMBRE{get; set;}
    public int CIUDAD {get; set;}
}

¿Qué ha cambiado? Bien, que ya no es necesario todo ese rollo de get{ return…..; sino que el compilador infiere que estamos estableciendo un regreso de valor y una asignación de valor, pero entra la duda, qué pasaría si quisieramos que fuera una propiedad de solo lectura? Bien, pues sencillo, tenemos que declarar el valor para set como privado, es decir:

public class Point
{
    public int NOMBRE{get; private set;}
    public int CIUDAD  {get; private set;}
}

Mucho mas sencillo no?

Salu2

Héctor Pérez

Videos: Sunscreen & Microsoft Your Potential, Our Passion

Hacía tiempo quería poner estos videos, el primero se llama Sunscreen, me lo mostró una de mis mejores amigas, y lo pongo aquí dedicado a ella, que me ha inspirado mucho, si llegas a leer esto Melissa, no tengo palabras para agradecer todo lo que has hecho por mí, qué desveladas nos pegamos platicando! Un abrazo  y TKM 🙂 Particularmente, me gusta la parte que dice :

«…convive con tus padres, nunca sabes cuándo se irán para siempre, sé bueno con tus hermanos, son el mejor vínculo con tu pasado y seguirán contigo en el futuro. Entiende que los amigos vienen y se van, pero hay unos escogidos que debes conservar…»

Ok, siguiendo con la línea de videos,le toca el turno a  los videos de Microsoft, que hablan sobre el potencial, en lo personal me gustan mucho, espero que a ustedes también:

YOUR POTENTIAL OUR PASSION 1:

 

POTENTIAL:

WELCOME TO MICROSOFT:

YOUR POTENTIAL OUR PASSION 2(INGLES):

YOUR POTENTIAL OUR PASSION 3(INGLES):

Bien pues espero les hayan gustado, un saludo 🙂

Héctor Pérez

¿Cómo cargar una tabla de BD hecha en SQL 2005 en WPF?

 

Bien, pues esta es una pregunta que me ha llegado hoy, así que he decidido escribir sobre esto hoy.

Antes que nada; ¿Qué control usar?

Bien, los que ya están mas adentrados en esto, sabrán que actualmente el control DataGridView existente en Windows Forms no existe en WPF, pero sí en silverlight, así que, lo que yo les recomiendo es usar un control ya existente y que es gratuito, se llama Xceed DataGrid for WPF, y lo puedes descargar desde aquí:

http://xceed.com/Grid_WPF_Intro.html

Tienes que registrarte para que te den un serial válido, la verdad es un control muy sencillo de usar, vale si no estás convencido puedes echarle un vistazo al demo aquí:

http://xceed.com/Grid_WPF_Demo.html

Bien, si ya has descargado e instalado el control, lo que tienes que hacer es :

1.- Importar las librerías necesarias, yo lo he hecho desde Visual Studio, ya has de saber, click derecho sobre el proyecto, agregar referencias, e importas todas las que empiecen con XCeed(XCeed.Controls,XCeed.Datagrid… etc).

Una vez hecho esto, si vas a tu ToolBar, notarás que tienes nuevos controles disponibles para insertar, en este caso debes insertar el DataGridControl:

datagrid1

Como puedes observar, el control es insertado inmediatamente, y a la vez Visual Studio nos genera el código necesario para hacer referencia al namespace.

2.- Vale lo siguiente es configurar el control desde XAML, esto lo haremos agregando 2 atributos a nuestro control, los atributos serán:

x:Name=»playersGrid» ItemsSource=»{Binding}

O sease agregamos un nombre a la grilla para que pueda ser usada desde código, y la fuente de datos de la misma, en este caso solo ponemos Binding, el cual hará binding con lo generado desde el código C#.

A continuación, vamos a nuestro archivo Code behind, y agregamos lo siguiente:

 

 

protected override void OnInitialized(EventArgs e)
{

    DataSet ds;

    base.OnInitialized(e);

    ds = getData();

    playersGrid.DataContext = ds.Tables[«cliente»];

}

private DataSet getData()
{

    string connString = string.Format(«Data Source=HÉCTOR1\\SQLEXPRESS; AttachDbFilename=|DataDirectory|\\Libreria.mdf; Integrated Security=True; User Instance=True»);

    SqlConnection conn = new SqlConnection(connString);

    DataSet dataSet = new DataSet();

    SqlDataAdapter playersAdapter = new SqlDataAdapter();

    playersAdapter.SelectCommand = new SqlCommand(«Select cve_cliente, nombre, paterno, materno, calle, ciudad from cliente», conn);

    playersAdapter.Fill(dataSet, «cliente»);

    return dataSet;

}

 

Básicamente, aquí lo que hago es hacer una conexión con mi servidor de Base de Datos, hago la consulta correspondiente y regreso el dataset cliente, el cual entrará en el DataContext de la grilla. Si quieres probar con tu base de datos, tienes que cambiar:

«Data Source=NOMBRE_DE_TU_SERVIDOR;

DataDirectory|\\TU_BASE_DE_DATOS.mdf;

 

(«Select cve_cliente, nombre, paterno, materno, calle, ciudad from cliente» POR TU SENTENCIA SQL,

«cliente» por la tabla que quieres meter en el DataContext.

Con todo esto, el resultado será algo como esto:

datagrid3

Ahora bien, si quieres jugar un poco mas, puedes darle click al centro de la Grilla:

datagrid4

Con lo cual nos aparecerán opciones de configuración de la grilla, en mi caso, cambié el tipo de vista y el tema:

datagrid5

con lo cual, nos queda algo mas chévere:

datagrid6 

Espero que les haya sido de utilidad, un saludo, por cierto, igual pudiste haber utilizado el mismo control DataGridView usado en el framework 2, pero por el momento creo que esto es mejor no? Salu2

Link del proyecto: EjemploDataGrid.rar-download

Héctor Pérez

Introducción a WPF, y creación de una aplicación WPF 3-D, parte 5 de N

 

Vale, qué tal a todos?? Hace ya un buen tiempo que no posteo, pero es que he estado un poco ocupado aprendiendo y comprendiendo varios recursos que en futuras entradas les mostraré.

Pero bien, en lo que estabamos, la entrada pasada había quedado hecha nuestra grilla con 4 botones, si alguien gusta bajarse el proyecto hasta aquí hecho, pueden descargarlo de aquí:

LINK: Aplicacion%203-d.rar-download

Ok, seguimos adelante, lo que vamos a hacer ahora, es empezar a insertar nuestras imágenes de los planos del edificio.

Tradicionalmente, los planos del edificio se verían algo así:

cisco_planta_baja

Qué dicen? Un poco sencillo no? Lo que nosotros queremos es recrear estos planos en un modelo tridimensional y de una manera muy sencilla, para ello, vamos a ir a Blend, abrimos nuestro proyecto que llevamos hasta aquí, y vamos a darle click derecho sobre nuestro proyecto y a continuación Add New Folder:

addnewfolder

Después de esto, nos pedirá el nombre de la carpeta, le llamaremos «Imagenes» (sin las comillas), si por error no le has puesto nombre, puedes renombrarla haciendo doble click sobre el nombre actual de la carpeta.

Para motivos de este proyecto, aquí están las imagenes que usaré en el proyecto, si es que quieres ir haciendo el proyecto a mi paso:

 

LINK FOLDER IMAGENES: Images.rar-download

 

Ahora, lo que haremos es pasar a blend las imagenes que usaremos, esto lo podemos hacer dando click derecho sobre la carpeta «Imagenes», y posteriormente en la opción «Add existing item…». Vamos a la carpeta de las imagenes y seleccionamos todas, posteriormente damos click en abrir.

Hasta ahora, tu explorador del proyecto debe verse algo asi:

imagenes1

Ahora sí, viene lo interesante, vamos a dar doble click sobre la imagen «cisco_planta_baja.jpg», esto debe de insertar la imagen dentro de nuestra ventana de la aplicación.

cisco_planta_baja1

El tamaño de la imagen es mucho mas grande que nuestra ventana, por lo cual debemos reajustarla con los siguientes valores:

layout1

Básicamente, lo que hemos hecho es ubicar la imagen en la columna # 1 (recuerden que hemos creado 2 columnas, y que WPF comienza a enumerar regularmente las cosas desde 0, por lo cual la imagen queda en la columna 1 (que en realidad es la segunda), y hemos ajustado los márgenes a 0, por lo que debería verse algo así:

window1

Bien, ahora lo que haremos será ir al menú con la imagen seleccionada, damos click sobre Tools y posteriormente en la opción «Make Image 3D».

En principio no veremos nada extraño, pero si vamos a nuestro panel de Object and Timeline, notaremos que se nos ha creado un Viewport 3D. Este será nuestro contenedor principal, si expandimos mas nuestros nodos, llegaremos hasta nuestra imagen del principio, con el nombre de Model(Parte marcada con verde), que es en realidad el modelo que hemos creado para la imagen:

ed1

Ahora bien, al momento de seleccionar Model, aparecen unas flechas sobre nuestra imagen (circulado con rojo en la imagen anterior), estas flechas son las encargadas de mover nuestro objeto 3D hacia donde queramos, puedes intentarlo si quieres, regresando al estado original con Ctrl+Z.

3d2

Empieza a ser sorpendente no? Ok, vamos a nuestro explorador y renombramos nuestro objeto «[Viewport3D]» por «PlantaBaja».

Procedemos a hacer lo mismo con las imagenes «cisco_planta_segundab.jpg» , «cisco_planta_primera.jpg» y «cisco_planta_baja.jpg», renombrando cada Viewport 3D con su respectivo nombre, te debe quedar algo asi:

renombrado

Ahora, para facilitarnos las cosas y tenerlas mas ordenadas, vamos a agrupar nuestros ViewPorts dentro de una grilla, seleccionamos los 4 elementos y damos click derecho -> Group Into -> Grid. A esta grilla la llamaremos «Objetos 3D».

Bien, vamos a modificar nuestros modelos para dar la apariencia deseada, colocando una planta debajo de la otra, para simular las plantas del edificio. seleccionamos sobre nuestro Viewport «PlantaBaja», y expandimos su nodo, hasta llegar al llamado «[PerspectiveCamera]», que es el encargado de manejar las camaras de los objetos 3D:

camara1

Si observamos, existen otras propiedades en los elementos 3D, como el ModelContainer(encargado de almacenar los objetos, bien una imagen, un botón, etc), el AmbientContainer (Que mantiene los colores «ambientales») y el DirectionalContainer.

Ahora, manejaremos nuestra cámara para que nos dé el ángulo necesario, teniendo seleccionada esta opción, vamos a modificar la opción Transform de las propiedades, y sobre la pestaña Rotate, colocamos 64 sobre la rotación de las X:

transform

Esto hará que nuestra cámara se ponga en una perspectiva diferente. Hacemos lo mismo con las cámaras de los otros objetos Viewport 3D. Ten cuidado que sea el elemento Rotate el seleccionado para colocar el valor 64, y no te preocupes si los objetos «desaparecen» de la escena de repente. Algo así te debe de quedar:

3d3

Ok, ahora es simple cuestión de acomodar cada uno de los objetos, seleccionamos nuestro ViewPort llamado «PlantaBaja», y lo arrastramos hacia abajo, acomodamos nuestros Viewports para que queden uno encima de otro:

3d4

Sí sí, sé que has de decir que aún se ve feo, vamos a arreglar eso; seleccionamos nuestros 4 Viewport 3D, y manteniendo la tecla shift apretada, reducimos el tamaño de nuestros ViewPorts y los acomodamos para que se vea un poco mas estilizado todo:

3d5

Ok, ahora ocurre un problema, nuestras imágenes aparecen cortadas, esto se resuelve de una manera muy sencilla, vamos a las propiedades de nuestros Viewport 3D, y buscamos la propiedad ClipToBounds, con lo cual las imágenes dejarán de estar «clipeadas» y se mostrarán completamente:

3d6

Bien, por hoy lo dejaremos hasta aquí, próximamente nos meteremos con las líneas de tiempo para animar nuestros objetos, aquí les dejo el archivo hasta donde vamos hoy, por si quieren comparar con el suyo, salu2.

Héctor Pérez