Вы находитесь на странице: 1из 32

Taller de Desarrollo de Aplicacion Windows y Web con C#

1 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Microsoft Visual Studio es un entorno de desarrollo integrado (IDE, por sus siglas en ingls) para sistemas operativos Windows. Soporta varios lenguajes de programacin tales como Visual C++, Visual C#, Visual J#, y Visual Basic .NET, al igual que entornos de desarrollo web como ASP.NET. Aunque actualmente se han desarrollado las extensiones necesarias para muchos otros.

Visual Studio permite a los desarrolladores crear aplicaciones, sitios y aplicaciones web, as como servicios web en cualquier entorno que soporte la plataforma .NET (a partir de la versin .NET 2002). As se pueden crear aplicaciones que se intercomuniquen entre estaciones de trabajo, pginas web y dispositivos mviles.

Visual Studio 2008

Visual Studio 2008 fue publicado (RTM) el 17 de noviembre de 2007 en ingls, mientras que la versin en castellano no fue publicada hasta el 2 de febrero de 2008.3

El nuevo framework (.NET 3.5) est diseado para aprovechar las ventajas que
2 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

ofrece el nuevo sistema operativo Windows Vista a travs de sus subsistemas Windows Communication Foundation (WCF) y Windows Presentation Foundation (WPF). El primero tiene como objetivo la construccin de aplicaciones orientadas a servicios, mientras que el ltimo apunta a la creacin de interfaces (qu son las interfaces) de usuario ms dinmicas que las conocidas hasta el momento.4

A las mejoras de desempeo, escalabilidad (qu es) y seguridad con respecto a la versin anterior, se agregan, entre otras, las siguientes novedades: La mejora en las capacidades de pruebas unitarias permiten ejecutarlas ms rpido independientemente de si lo hacen en el entorno IDE o desde la lnea de comandos. Se incluye adems un nuevo soporte para diagnosticar y optimizar el sistema a travs de las herramientas de pruebas de Visual Studio. Con ellas se podrn ejecutar perfiles durante las pruebas para que ejecuten cargas, prueben procedimientos contra un sistema y registren su comportamiento, y utilizar herramientas integradas para depurar y optimizar.

Visual Studio 2008 permite incorporar caractersticas del nuevo Windows Presentation Foundation sin dificultad tanto en los formularios de Windows existentes como en los nuevos. Ahora es posible actualizar el estilo visual de las aplicaciones al de Windows Vista debido a las mejoras en Microsoft Foundation Class Library (MFC) y Visual C++. Visual Studio 2008 permite mejorar la interoperabilidad entre cdigo nativo y cdigo manejado por .NET. Esta integracin ms profunda simplificar el trabajo de diseo y codificacin.

LINQ (Language Integrated Query) es un nuevo conjunto de herramientas diseado para reducir la complejidad del acceso a bases de datos a travs de extensiones para C++ y Visual Basic, as como para Microsoft .NET Framework. Permite filtrar, enumerar, y crear proyecciones de muchos tipos y colecciones de datos utilizando todas las mismas sintaxis, prescindiendo del uso de lenguajes especializados.

3 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Visual Studio 2008 ahora permite la creacin de soluciones multiplataforma adaptadas para funcionar con las diferentes versiones de .NET Framework: 2.0 (incluido con Visual Studio 2005), 3.0 (incluido en Windows Vista) y 3.5 (incluido con Visual Studio 2008). .NET Framework 3.5 incluye la biblioteca ASP.NET AJAX para desarrollar aplicaciones web ms eficientes, interactivas y altamente personalizadas que funcionen para todos los navegadores ms populares y utilicen las ltimas tecnologas y herramientas Web, incluyendo Silverlight y Popfly.

C#
C# (pronunciado si sharp en ingls) es un lenguaje de programacin orientado a objetos desarrollado y estandarizado por Microsoft como parte de su plataforma .NET, que despus fue aprobado como un estndar por la ECMA (ECMA-334) e ISO (ISO/IEC 23270). C# es uno de los lenguajes de programacin diseados para la infraestructura de lenguaje comn.

Su sintaxis bsica deriva de C/C++ y utiliza el modelo de objetos de la plataforma .NET, similar al de Java, aunque incluye mejoras derivadas de otros lenguajes.

El nombre C Sharp fue inspirado por la notacin musical, donde '#' (sostenido, en ingls sharp) indica que la nota (C es la nota do en ingls) es un semitono ms alta, sugiriendo que C# es superior a C/C++. Adems, el signo '#' se compone de cuatro signos '+' pegados.1

Aunque C# forma parte de la plataforma .NET, sta es una API, mientras que C# es un lenguaje de programacin independiente diseado para generar programas sobre dicha plataforma. Ya existe un compilador implementado que provee el marco Mono - DotGNU, el cual genera programas para distintas plataformas como Windows, Unix, Android, iOS, Windows Phone, Mac OS y GNU/Linux.
4 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Entorno de Visual Studio 2008 (IDE)

Una vez abierto el visual studio se crea un nuevo proyecto en Archivo -> Nuevo Proyecto y aparecer la siguiente ventana:

5 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

En ella se elige del lado izquierdo un proyecto de tipo Visual C#, mientras que de lado derecho se considera una aplicacin de Windows Forms, en la parte inferior se pondr el nombre de la aplicacin y posteriormente dar clic en aceptar. De manera general la siguiente imagen muestra algunas de las partes de visual studio

6 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Visual studio puede ser instalado en los siguientes sistemas operativos que cuenten con las caractersticas mnimas: - Windows XP Service Pack 2 o posterior - Windows Server 2003 Service Pack 1 o posterior - Windows Server 2003 R2 o posterior - Windows Vista - Windows Server 2008

Requerimientos de hardware: - Mnimo: 1.6 GHz CPU, 384 MB RAM, resolucin de 1024x768, disco duro a 5400 RPM - Recomendado: 2.2 GHz o superior, 1024 MB o ms de RAM, resolucin de 1280x1024, disco duro de 7200 RPM o ms. - En Windows Vista: 2.4 GHz CPU, 768 MB RAM.

Primer programa
Se propone el diseo de una nueva solucin en el visual estudio, se inicia con la seleccin del tipo de proyecto, en este caso; seleccionar de tipo Visual C#, y del lado derecho del tipo Aplicacin de Windows Forms, agregar un nombre para la solucin electa y dar clic en aceptar.

7 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Una vez que visual estudio, ha creado la solucin, en la nueva forma que lo ha hecho, agregar dos cajas de texto, a las cuales se les denominar usr, en la cual el usuario ingresar su nombre, cambiar a la segunda caja de texto por el de pwd, en esta caja de texto es donde el usuario ingresar su password. Tambin agregar dos labels a los cuales, se les cambia el texto que muestran, a una le poner el texto usuario y a la segunda el texto password, una vez hecho esto agregar dos botones, al primer botn cambiar el texto por aceptar. Al segundo botn tambin modificar el nombre y el texto y estos sern cancelar en ambos casos, de tal suerte que el form sea como el que a continuacin se muestra:

8 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Antes de comenzar, con la programacin de los botones, se necesitar cambiar algunas propiedades de la forma, primero dar clic en la forma e ir a sus propiedades y hacer los siguientes cambios en sus propiedades: ControlBox: False, apagando esta control quitar de la ventana de minimizar, maximizar y cerrar ShowIcon: False, apagando este control eliminar el cono de la parte superior izquierda de la ventana StartPosition: CenterScreen, inicializar la ventana centrada en la pantalla Text: Control de Acceso, pondr este texto como ttulo de la ventana. Dar clic en la caja de texto correspondiente al password e ir a sus propiedades buscando la opcin passwordchard y poner el carcter que se desee desplegar cuando se introduzca el password. Despus dar doble clic sobre la forma para que se cree el evento load de la forma y aqu pegar el siguiente cdigo: this.AcceptButton = Aceptar; //hace que el botn Aceptar el botn default para que se ejecute en cuanto se presione enter.
9 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

this.CancelButton = Cancelar; //ejecutar el cdigo del botn aceptar en caso de que presionar el botn de escape this.Aceptar.Enabled = false; //Deshabilita el botn de guardar, hasta que el usuario ingrese datos necesarios usr.Focus();//enva al foco hacia la caja de usr Una vez hecho esto, moverse hacia la parte superior del cdigo hasta en donde se declaran las libreras y agregar la siguiente lnea: Using System.Data.OleDb; El cdigo deber verse como en la siguiente imagen:

Esta librera permitir el acceso hacia la base de datos. Regresar a la vista diseo y dar doble clic sobre el botn de cancelar para que se traslade hacia el evento clic del botn en donde se pegar el siguiente cdigo: Application.Exit(); El cual permitir que al momento de presionar se cerrar por completo la aplicacin. Regresar a la vista diseo de la forma en donde se debe presionar con doble clic sobre el la caja de texto pwd, esto; permite llegar al evento TextChanged en donde se pegar el siguiente cdigo Aceptar.Enabled = true; Este cdigo habilitara el botn de aceptar Adjuntar tambin a dicha solucin el archivo funciones. cs que tambin se incluyen en este manual. Para adjuntar el archivo a la solucin, copiar el archivo a la carpeta raz de la solucin, como en la siguiente imagen:

10 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Despus en visual estudio en el explorador de soluciones presionar el icono de "mostrar todos los archivos" esto mostrar todos los archivos contenidos en esta carpeta, situarse sobre el icono de funciones .cs y presionar clic derecho y Luego dar clic en la opcin "incluir en el proyecto", como se muestra en la siguiente imagen
11 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

De este punto en adelante utilizar la base de datos Curso la cual se adjunta con este manual, la que se tendr que adjuntar al sqlserver. Una vez adjuntada la base de datos volver a la vista de diseador en el visual estudio y dar doble clic en el botn guardar y pegar el siguiente cdigo: OleDbDataReader DR; //crea un data Reader llamada DR String query; //se declara una variable de nombre query en donde se almacena temporalmente las consultas a la base

12 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

de datos, antes de ejecutarlos query=""; est vaca fn.Cn = new OleDbConnection("Provider=SQLOLEDB;User id=sa;Password=hola;Initial Catalog=Curso;Data Source=DESKTOP\\SQLEXPRESS;"); //Esta es la cadena de conexin hacia el SQLServer, en el cual se declara el tipo de proveedor, nombre de usuario, password, nombre de la base de datos, y el nombre del servidor fn.Cn.Open();//abrimos la conexin query="Select NomUsuario From usuario where UsuarioPK='" + usr.Text + "' and Password='" + pwd.Text +"'";// Se carga el query con los nombres de usuario y password para verificar que existan OleDbCommand comando = new OleDbCommand(query, fn.Cn);//ejecutamos el query DR = comando.ExecuteReader();//vacir el contenido de la ejecucin del query en el datareader if(DR.Read()){//condicionar, si el datareader tiene datos entonces el usuario existe de lo contrario ejecutar el cdigo del else label3.Text=""; label3.Text="Bienvenido :" + DR["NomUsuario"]; fn.Conectado = true;//cierra la conexin hacia la base de datos this.Close();//esta lnea de cdigo cerrar la aplicacin. Pues el usuario especificado ha sido encontrado y deber mostrar la ventana principal de la aplicacin. }else{//este fragmento de cdigo se ejecutar,
13 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

/ Asegurarse que la variable

si, no se encuentra el usuario especificado en la base de datos label3.Text="Usuario o Contrasea"; pwd.Text=""; pwd.Focus(); fn.Cn.Close();//cierra la conexin hacia la base de datos }//fin de botn guardar

De tal manera que al terminar la pantalla deber de verse como en la siguiente presentacin:

Una vez terminado el botn guardar, agregar 4 ventanas ms, a las cuales se les denominar: 1.- Men 2.- Niveles 3.- Eventos 4.- Eventos2 Antes de continuar con este ejemplo, se necesitar abrir el archivo program.cs y agregar el siguiente cdigo: if (fn.Conectado == true)
14 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Application.Run(new Menu()); Dentro de la siguiente funcin static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } De manera que el cdigo quede de como el que a continuacin se muestra static void Main() { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); if (fn.Conectado == true)//En este if evala si la conexin hacia la base de datos est activa y si lo est lanzar la ventana menu Application.Run(new Men()); } Una vez realizado esto la primera forma que se ha agregado (men), se convierte en una ventana del tipo MDI (Multiple Document Interface, o interface de mltiples documentos), para hacer esto posible cambiar la propiedad isMdiContainer a true, como se muestra en las siguientes imgenes.

15 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Despus de cambiar la propiedad de la forma, esperar los cambios, el ms notable es el cambio de color del fondo.

16 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Es necesario resaltar que en cada proyecto solo se podr disponer de una sola ventana del tipo MDI, en esta forma agregar un men utilizando la herramienta menuStrip, presionando doble clic sobre la herramienta, se arrastra hacia la forma y agregar las siguientes opciones, como en la imagen que se muestra a continuacin:

17 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Lo primero que se programa es la ltima opcin salir presionando doble clic encima de la palabra lo cual llevar al evento y agregar el siguiente cdigo: fn.Cn.Close();//cierra la conexin con la base de datos this.Close();//cierra la aplicacin Ahora al programar la opcin Eventos 2, hacer doble clic en la palabra as como en la opcin anterior: vEventos2 frmEventos = new vEventos2(); frmEventos.MdiParent = this; frmEventos.Show(); Con el cdigo de la primera lnea, se crea una variable llamada frmEventos del tipo vEventos2 que es la forma eventos 2 que se agreg anteriormente, la segunda lnea configura a la variable frmEventos como una ventana hija de Men, esta propiedad permite que cuando esta ventana sea lanzada, se pueda interactuar con las otras ventanas de la solucin las cuales estarn disponibles, la ltima lnea lanza la ventana Eventos 2. Para la opcin de eventos, volver a la vista diseo y dar doble clic sobre la opcin Eventos y pegar el siguiente cdigo:
//ventana MDI child vEventos fdmeventos = new vEventos(); fdmeventos.MdiParent = this;

18 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

fdmeventos.Show();

Para la opcin niveles, volver a la vista diseo y sobre la opcin del men niveles pegar el siguiente cdigo:
//ventana SDI-> este tipo de ventana no permite interactuar con otras ventanas abiertas vNiveles frmNiveles = new vNiveles(); frmNiveles.ShowDialog();

Se procede a la programacin de la venta de Niveles la cual contendr los niveles de la aplicacin, esta ventana tiene la particularidad de ser de tipo SDI, lo cual quiere decir que no se podr interactuar con otras ventanas de la aplicacin, mientras esta ventana se encuentre abierta, este tipo de ventanas se podrn localizar cuando se est en una pantalla de impresin o en una de preferencias entre otras. Abrir la forma de niveles, a la cual se agrega un DataGridView, y un botn de tal suerte que la forma quede como la que se muestra a continuacin:

Lo primero que se har es: Agregar la librera de acceso a base de datos.


using System.Data.OleDb;

19 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Un poco ms abajo en la seccin public partial class vNiveles : Form declarar la siguientes variables
//declarar una variable adaptador OleDbDataAdapter adaptador; //agregar instancia al dataset DataSet Ds = new DataSet();

Despus en la vista diseo dar doble clic en la forma para llamar el evento load de la misma y agregamos el siguiente cdigo:
String query; //Deshabilitar el botn guardar Guardar.Enabled = false; //mandar dos parmetros al adaptador query y la conexin a la base de datos query = ""; query = "Select Nivel"; adaptador = new OleDbDataAdapter(query, fn.Cn); //El query se ejecutar al momento de llenar el DataSet //al adaptador se le envan dos parmetros, el DataSet y un nombre logico adaptador.Fill(Ds, "xNiveles"); //vaciamos el contenido del dataset en el dataGridView dataGridView1.DataSource = Ds.Tables["xNiveles"]; //Ocultar la primera columna, que es en donde se muestra el ID dataGridView1.Columns[0].Visible = false; //Redimensionar la segunda columna para una mejor visualizacin de los datos dataGridView1.Columns[1].Width = 250; idNivel, DescNivel as 'Nombre del Nivel' from

Lo siguiente es programar un botn de guardar, regresar a la vista diseo de la forma y dar doble clic en el botn de guardar y pegar el siguiente cdigo:
//crear un oledbcomanbuilder OleDbCommandBuilder cb = new OleDbCommandBuilder(adaptador); //el OleDbComandBuilder, crear automticamente todos query necesarios //si hay una modificacin crea el update, si hay una alta crea el insert y as sucesivamente //con este comando manda ejecutar todos los comandos SQL generados por el dataGridView adaptador.Update(Ds,"xNiveles"); //Cambia el status a los registros del dataset para que sean tomados como que los datos han sido tomados y deshabilita el botn de guardar Ds.Tables["xNiveles"].AcceptChanges(); Guardar.Enabled = false;

Ahora habilitar el botn de guardar pero nicamente si hay cambios que guardar, para saber si hay cambios, se necesita el evento KeyUp, de la forma principal, entonces; volver a la vista diseo y dar clic sobre ella, despus ir a la caja de
20 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

propiedades y buscar KeyPreview, ponerlo en true, despus en la parte superior se encuentra el cono de un rayo el cual se presiona para que despliegue los eventos de dicho objeto, buscar el evento KeyUp, y dar doble una vez hecho esto, pegar el siguiente cdigo:
//para que este evento funciones hay que poner el evento keypreview en true en las propiedades de la ventana if (Ds.HasChanges())//si el data set tiene cambios habilitar el botn de guarda y de no ser as lo deshabilitar Guardar.Enabled = true; else Guardar.Enabled = false;

Una vez hecho realizado, la ventana deber de verse as:

En esta ventana no se podr dar clic en otra parte de la aplicacin para hacer otras modificaciones.
21 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Ahora, programar la opcin Eventos, para ello, dar doble clic sobre la palabra eventos del men, en el evento que se crea, pegar el siguiente cdigo: vEventos fdmeventos = new vEventos(); fdmeventos.MdiParent = this; fdmeventos.Show(); Este cdigo es igual que el del evento anterior, pero la diferencia entre esta y la ventana anterior se hace a continuacin. Abrir la forma eventos y agregar un dataGridView, y un botn la ventana, ser como la siguiente:

Al botn que se agreg, cambiar el nombre por el de guardar, as como el texto. Cambiar al cdigo de la ventana y agregar la siguiente lnea de cdigo que es la librera de acceso a datos, tal y como se hizo al inicio del proyecto: using System.Data.OleDb; Un poco ms abajo en el cdigo buscar el evento: public partial class vEventos : Form Y agregar el siguiente cdigo: OleDbDataAdapter adapNiv; OleDbDataAdapter adapEven; DataSet DS = new DataSet();
22 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

En donde se declaran dos OleDbDataAdaptar y un data set que se utilizarn a continuacin. Una vez hecho esto, volver a la vista diseo y presionar dando doble click sobre la forma para llamar al evento load de esta forma, y pegar el siguiente cdigo: string query;//declarar una variable query para almacenar las consultas a la base de datos temporalmente query = "Select idNivel, DescNivel From Nivel Order by DescNivel";//llamar el id y el nombre de los niveles de la tabla nivel adapNiv = new OleDbDataAdapter(query, fn.Cn);//ejecutar el query y se guardan en un adaptador query = "Select idEvento, DescEvento as 'Nombre del Evento', Precio , Duracion, idNivel from Evento";//Pedir a sql, el id del evento, descripcin enmascarndolo como Nombre del evento, precio, duracin y el id nivel de la tabla evento adapEven = new OleDbDataAdapter(query, fn.Cn);//ejecutar el query y lo guardar en un adaptador adapEven.Fill(DS, "xEventos");//pasamos el contenido de adapEven(info. de los eventos) al data set y llamarlo xEventos adapNiv.Fill(DS, "xNiveles");//pasar el contenido de adapNiv(info de los niveles) al data set y nombrarlo xNiveles DS.Relations.Add("xRel", DS.Tables["xNiveles"].Columns["idNivel"],DS.Tables["xEventos" ].Columns["idNivel"]);//esta lnea es la ms compleja ya que xRel (relacionamos) dos columnas de nuestra consultas, si notamos ambos Eventos y Niveles, comparten el campo idNiveles, y aqu se relacionan en el data set DataGridViewComboBoxColumn idNivel = new DataGridViewComboBoxColumn();//declarar una variable del tipo ComboBox, este ComboBox, es parte de nuestro datagrid idNivel.DisplayMember = "DescNivel";//esto es el texto que mostrar el combobox idNivel.ValueMember = "idNivel";//este es el id que no mostrar el combo box idNivel.DataPropertyName = "IdNivel";//el nombre del ComboBox idNivel.DataSource = DS.Tables["xNiveles"];//de donde vienen los datos para nuestro combobox dataGridView1.DataSource = DS.Tables["xEventos"];//llenar el datagridview con los datos de xEventos dataGridView1.Columns.Add(idNivel);//agregar una columna al datagridview, esta columna nueva estar el combobox
23 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

dataGridView1.Columns[0].Visible = false;//ocultar la primera columna ya que aqu est el id, y esta info, el usuario no tiene razn de verla dataGridView1.Columns[4].Visible = false;//ocultar la columna ya que aqu est el id, y esta info, el usuario no tiene razn de verla dataGridView1.Columns[1].Width = 300; //ensanchar esta columna para una mejor visualizacin de la informacin Guardar.Enabled = false;//desactivar el botn guardar ya que al momento de hacer la primera no hay cambios que guardar Una vez terminado el cdigo de esta ventana ejecutar el proyecto y la ventana aparecer de la siguiente manera:

En donde se podr apreciar la forma en que el datagridview, enlaz los datos con el catlogo de niveles, ahora se debe validar que cuando el usuario introduzca un valor en la columna de precio, ste sea realmente un nmero y no un carcter distinto, para hacer esto, ir a la vista diseo y dar clic sobre el datagridview, despus dirigirse hacia la caja de propiedades, y en la parte superior ubicar el cono de un pequeo rayo, dar clic para que se despliegue los eventos disponibles de este objeto, buscar el evento CellValidating, y dar doble clic, ello conducir al cdigo de este evento, es en esta parte donde se pega el siguiente cdigo:
24 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

dataGridView1.Rows[e.RowIndex].ErrorText = "";//limpia todos los mensajes de error del datagridview float nuevoPrecio; //declara una variable de tipo float para hacer la validacin ms adelante if (dataGridView1.Rows[e.RowIndex].IsNewRow)//revisa si es un rengln nuevo, y si lo es no valida nada return;//sale de la validacin if (e.ColumnIndex == 2)//si se modifica la columna del valor { if (!float.TryParse(e.FormattedValue.ToString(), out nuevoPrecio))//revisa si es numrico en caso de no serlo mostrar el //mensaje de error { e.Cancel = true;//impide que se cambie a otra celda dataGridView1.Rows[e.RowIndex].ErrorText="Error el precio deve de ser numero y positivo"; } }

An cuando se h agregado el cdigo anterior, la validacin no est completa, para que lo est, se necesita regresar a la vista diseo del proyecto y dar clic en la forma y nuevamente buscar el cono del rayo, en la caja de propiedades, y dar doble clic en el evento KeyUp, y pegar el siguiente cdigo:
if (DS.HasChanges())//Evala si el DataSet tiene algn cambio de ser as habilitar el botn de guardar, de lo contrario lo deshabilitar Guardar.Enabled = true; else Guardar.Enabled = false;

Con esto, se est cerca de terminar, solo falta programar el botn de guardar, para ello regresar a la vista diseo y dar clic en el botn de guardar y pegar el siguiente cdigo:
OleDbCommandBuilder CB = new OleDbCommandBuilder(adapEven); adapEven.Update(DS, "xEventos"); DS.Tables["xEventos"].AcceptChanges(); Guardar.Enabled = false;

En este cdigo, crear una variable de tipo OleDbComandBuilde, enlazada al datagridview, una vez realizado, indicarle que acepte los cambios hechos y deshabilitar nuevamente el botn de guardar, efectuado; se obtendr la nueva forma. Debido a la manera en que son llamadas y a las propiedades de las mismas tenemos diferentes tipos de ventanas; la primera venta de acceso en donde no se tendrn botones de control (minimizar, maximizar y cerrar), una ventana MDI en la cual se pueda encapsular y ordenar las ventanas de la aplicacin, MDIClid la cual
25 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

solo puede maximizarse dentro de la ventana MDI y permite interactuar con otras ventas y por ltimo la venta SDI, que se abre de manera exclusiva en la aplicacin y permite interactuar con otras ventanas dentro de la aplicacin, tambin se obtiene la forma de accesar a bases de datos mediante controles ofrecidos por el lenguaje, y gracias a los cuales nos se evitan muchos problemas ya que ya no es necesario que se generen las consultas para actualizar, agregar o borrar un registro de la base de datos.

26 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

C# para web
Para crear un nuevo proyecto de C# para web, en visual studio crear un nuevo sitio web, como se aprecia en la imagen:

Una vez creado el nuevo sitio web agregar una tabla, con tres cajas de texto, seis label, utilizar la herramienta FileUpload, DropDownList, y dos botones, de tal manera que se aprecie de la siguiente manera:

En C# para web se tienen dos tipos de archivos para la aplicacin, el primero tiene la extensin aspx y el segundo aspx.cs la diferencia entre el primero y el segundo es
27 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

que el primero contiene el cdigo html requerido para la ejecucin de la aplicacin y el archivo cs contiene el cdigo cd C#. Antes de comenzar, se requiere agregar la librera de acceso a base de datos, esto en al archivo aspx.cs:
using System.Data.OleDb;

Despus un poco ms abajo en la siguiente seccin


public partial class Default2 : System.Web.UI.Page

Agregar el siguiente cdigo que es la cadena de conexin a bases de datos


OleDbConnection Cn = new OleDbConnection("Provider=SQLOLEDB;User id =sa;Password = hola;Initial Catalog=Curso;Data Source=DESKTOP\\SQLEXPRESS;");

Despus regresar a la vista diseo del proyecto y dar doble clic en el lienzo para llamar el evento load de la nueva pgina y pegar el siguiente cdigo:
Llena_DDLTS();

El cual invoca a una funcion a cual tambien se adjunta


protected void Llena_DDLTS() { OleDbDataReader dr;//crear un datareader string query; //crear un query para obtener los tipos d seguridad asi como su descripcin y ordenarlos por la descripcin query="Select TipoSeguridadPk, DescTipoSeguridad from TipoSeguridad order by DescTipoSeguridad"; OleDbCommand comando = new OleDbCommand(query, Cn);//manada el query al datareader comando.Connection.Open();//abrir la conexin con la base de datos dr = comando.ExecuteReader();//ejecutamos el query Ts.DataSource=dr;//vaciar el contenido del data reader en el DropDownList Ts.DataTextField = "DescTipoSeguridad";//indica a el DropDown que muestre la descripcin de la seguridad Ts.DataValueField = "TipoSeguridadPk";//indica a el DropDown que oculte el id del tipo de seguridad Ts.DataBind();//refresca el contenido del combo if(Ts.Items.Count>0) idTS=Convert.ToInt32(Ts.SelectedValue); comando.Connection.Close();//cierra la conexin con la base de datos }

Volver a la vista diseo del sitio y dar clic en el botn de Abrir documento y pegar el siguiente cdigo:
28 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Response.Redirect("Default2.aspx?usr=" + TUsr.Text);

El cual al presionar el botn, conduce a la hoja Default2.aspx pasando el valor de lo que se tenga en caja de texto del nombre del usuario.

Lo siguiente es el botn de guardar, regresar a la vista diseo de la pgina y dar doble clic en el botn y pegar el siguiente cdigo:
FileStream archivo; //Parmetros para procedimiento almacenado int tam; string nom, ruta; if (FileUpload1.HasFile) { try//cachador de errorres { //Obtener parmetros a utilizar nom = FileUpload1.FileName; tam = FileUpload1.FileBytes.Length; //NOTA: EL ARCHIVO PDF PRIMERO LO GUARDO EN UNA EN EL //SERVIDOR Y LUEGO LO LEO LOCALMENTE PARA GUARDARLO EN LA BD ruta = "~/archivos/" + nom; //Guardar Archivo en Carpeta Servidor FileUpload1.SaveAs(MapPath(ruta)); //leer archivo //nom = FileUpload1.FileName; //tam = FileUpload1.FileBytes.Length; archivo = new FileStream(MapPath(ruta), FileMode.Open, FileAccess.Read); byte[] imagen = new byte[tam]; archivo.Read(imagen, 0, tam); archivo.Close(); OleDbCommand cm = new OleDbCommand("spInsArch", Cn); cm.CommandType = CommandType.StoredProcedure; OleDbParameter usrPk = new OleDbParameter("@usr", OleDbType.VarChar); OleDbParameter nomusr = new OleDbParameter("@nomusr", OleDbType.VarChar); OleDbParameter pwdusr = new OleDbParameter("@pwdusr", OleDbType.VarChar); OleDbParameter TipoSPk = new OleDbParameter("@tipo", OleDbType.Integer); OleDbParameter Foto = new OleDbParameter("@arch_docto", OleDbType.VarBinary); //Establecer valores y direccin de los parmetros usrPk.Value = TUsr.Text; usrPk.Direction = ParameterDirection.Input; nomusr.Value = TNomUsr.Text; nomusr.Direction = ParameterDirection.Input; pwdusr.Value = TPass.Text; pwdusr.Direction = ParameterDirection.Input;

CARPETA

29 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

TipoSPk.Value = idTS; Foto.Value = imagen; Foto.Size = imagen.Length; Foto.Direction = ParameterDirection.Input; //agregar parmetros al procedimiento cm.Parameters.Add(usrPk); cm.Parameters.Add(nomusr); cm.Parameters.Add(pwdusr); cm.Parameters.Add(TipoSPk); cm.Parameters.Add(Foto); cm.Connection.Open(); cm.ExecuteNonQuery(); cm.Connection.Close(); Label1.Text = "Registro Guardado Satisfactoriamente"; } catch (Exception ex) { Label1.Text = "Problemas al Guardar el registro: " + ex.Message; } }

En el cdigo anterior se sube el archivo al servidor y lo guarda en el directorio archivos del servidor, sin antes revisar el tamao del archivo para revisar que no sea mayor a 5 mb, luego declara la siguiente variable:
OleDbCommand cm = new OleDbCommand("spInsArch", Cn);

La cual es de tipo procedimiento almacenado, al cual se le envan variables propias para su correcta insercin en la base de datos y al finalizar se despliega el mensaje de Registro Guardado Satisfactoriamente, el sitio debera de verse como en la siguiente imagen:

30 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Y si todo el cdigo est funcionando debidamente mostrara el mensaje de la siguiente manera:

Una vez que esto funciona adecuadamente se genera una nueva pgina la cual ser llamada default2.aspx Una vez creada, ir al cdigo de la pagina y pegar el siguiente cdigo:
using System.Data.OleDb; que es la librera de acceso a base de datos, despues un poco mas abajo pegamos

el siguiente fragmento debajo de


public partial class Default2 : System.Web.UI.Page {

El cdigo es el siguiente:
OleDbConnection Cn = new OleDbConnection("Provider=SQLOLEDB;User id =sa;Password = hola;Initial Catalog=Curso;Data Source=DESKTOP\\SQLEXPRESS;");

Despus regresar a la vista diseo de el sitio y dar doble clic en el lienzo para que conduzca al evento load y pegar el siguiente cdigo:
OleDbDataReader DR;//crear un datareader string usr = Request.QueryString["usr"];//extraer el valor de la variable usr de la url OleDbCommand comando = new OleDbCommand("select FotoUsuario from Usuario where UsuariopK='" + usr + "'", Cn);//crear un query en donde si existe

31 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

un usuario con el nombre especificado regresar a la imagen almacenada en la base de datos comando.Connection.Open();//abrir la conexin DR = comando.ExecuteReader();//ejecutar la consulta if (DR.Read())//es verdadero si encontr al usuario { Response.Buffer = true;//carga en el bufer del navegador la imagen Response.ContentType = "image/JPG";//manda la banderas necesarias para que el navegador sepa que tipo de archivo le llegar //"application/pdf" o "image/jpeg" o "application/vnd.xls" o "application/msword" "video/x-flv" Response.BinaryWrite((byte[])DR["FotoUsuario"]);//comienza el streaming de el archivo binario hacia el navegador } comando.Connection.Close();//cerrar la conexin hacia la base de datos

La ejecucin de la pgina deber apreciarse as:

32 Prof. Jorge Luis Hernndez Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes cervantes.jl@gmail.com

Вам также может понравиться