Manual de C#

32
1 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected] Taller de Desarrollo de Aplicacion Windows y Web con C#

Transcript of Manual de C#

Page 1: Manual de C#

1 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Taller de Desarrollo de Aplicacion Windows y Web con

C#

Page 2: Manual de C#

2 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Microsoft Visual Studio es un entorno de desarrollo integrado (IDE, por sus siglas en

inglés) para sistemas operativos Windows. Soporta varios lenguajes de

programación 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 versión .NET 2002). Así se pueden crear aplicaciones que se

intercomuniquen entre estaciones de trabajo, páginas web y dispositivos móviles.

Visual Studio 2008

Visual Studio 2008 fue publicado (RTM) el 17 de noviembre de 2007 en inglés,

mientras que la versión en castellano no fue publicada hasta el 2 de febrero de

2008.3

El nuevo framework (.NET 3.5) está diseñado para aprovechar las ventajas que

Page 3: Manual de C#

3 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

ofrece el nuevo sistema operativo Windows Vista a través de sus subsistemas

Windows Communication Foundation (WCF) y Windows Presentation Foundation

(WPF). El primero tiene como objetivo la construcción de aplicaciones orientadas a

servicios, mientras que el último apunta a la creación de interfaces (qué son las

interfaces) de usuario más dinámicas que las conocidas hasta el momento.4

A las mejoras de desempeño, escalabilidad (qué es) y seguridad con respecto a la

versión anterior, se agregan, entre otras, las siguientes novedades:

La mejora en las capacidades de pruebas unitarias permiten ejecutarlas más rápido

independientemente de si lo hacen en el entorno IDE o desde la línea de comandos.

Se incluye además un nuevo soporte para diagnosticar y optimizar el sistema a

través de las herramientas de pruebas de Visual Studio. Con ellas se podrán

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 características 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 código nativo y código manejado por .NET. Esta integración

más profunda simplificará el trabajo de diseño y codificación.

LINQ (Language Integrated Query) es un nuevo conjunto de herramientas diseñado

para reducir la complejidad del acceso a bases de datos a través 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.

Page 4: Manual de C#

4 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Visual Studio 2008 ahora permite la creación 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 más eficientes, interactivas y altamente personalizadas que

funcionen para todos los navegadores más populares y utilicen las últimas

tecnologías y herramientas Web, incluyendo Silverlight y Popfly.

C#

C# (pronunciado si sharp en inglés) es un lenguaje de programación orientado a

objetos desarrollado y estandarizado por Microsoft como parte de su plataforma

.NET, que después fue aprobado como un estándar por la ECMA (ECMA-334) e

ISO (ISO/IEC 23270). C# es uno de los lenguajes de programación diseñados para

la infraestructura de lenguaje común.

Su sintaxis básica 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 notación musical, donde '#' (sostenido, en

inglés sharp) indica que la nota (C es la nota do en inglés) es un semitono más alta,

sugiriendo que C# es superior a C/C++. Además, 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 programación independiente diseñado 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.

Page 5: Manual de C#

5 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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:

Page 6: Manual de C#

6 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

En ella se elige del lado izquierdo un proyecto de tipo Visual C#, mientras que de

lado derecho se considera una aplicación de Windows Forms, en la parte inferior

se pondrá el nombre de la aplicación y posteriormente dar clic en aceptar.

De manera general la siguiente imagen muestra algunas de las partes de visual

studio

Page 7: Manual de C#

7 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Visual studio puede ser instalado en los siguientes sistemas operativos que cuenten

con las características mínimas:

- 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:

- Mínimo: 1.6 GHz CPU, 384 MB RAM, resolución de 1024x768, disco duro a 5400

RPM

- Recomendado: 2.2 GHz o superior, 1024 MB o más de RAM, resolución de

1280x1024, disco duro de 7200 RPM o más.

- En Windows Vista: 2.4 GHz CPU, 768 MB RAM.

Primer programa Se propone el diseño de una nueva solución en el visual estudio, se inicia con

la selección del tipo de proyecto, en este caso; seleccionar de tipo Visual C#, y del

lado derecho del tipo Aplicación de Windows Forms, agregar un nombre para la

solución electa y dar clic en aceptar.

Page 8: Manual de C#

8 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Una vez que visual estudio, ha creado la solución, 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. También 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 botón cambiar el texto por “aceptar”. Al segundo botón también

modificar el nombre y el texto y estos serán “cancelar” en ambos casos, de tal suerte

que el “form” sea como el que a continuación se muestra:

Page 9: Manual de C#

9 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Antes de comenzar, con la programación 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 título de la ventana.

Dar clic en la caja de texto correspondiente al password e ir a sus propiedades

buscando la opción passwordchard y poner el carácter que se desee desplegar

cuando se introduzca el password.

Después dar doble clic sobre la forma para que se cree el evento load de la forma y

aquí pegar el siguiente código:

this.AcceptButton = Aceptar; //hace que el botón

Aceptar el botón default para que se ejecute en cuanto se presione

enter.

Page 10: Manual de C#

10 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

this.CancelButton = Cancelar; //ejecutará el código

del botón aceptar en caso de que presionar el botón de escape

this.Aceptar.Enabled = false; //Deshabilita el

botón de guardar, hasta que el usuario ingrese datos necesarios

usr.Focus();//envía al foco hacia la caja de usr

Una vez hecho esto, moverse hacia la parte superior del código hasta en donde se

declaran las librerías y agregar la siguiente línea:

Using System.Data.OleDb;

El código deberá verse como en la siguiente imagen:

Esta librería permitirá el acceso hacia la base de datos.

Regresar a la vista diseño y dar doble clic sobre el botón de cancelar para que se

traslade hacia el evento clic del botón en donde se pegará el siguiente código:

Application.Exit();

El cual permitirá que al momento de presionar se cerrará por completo la aplicación.

Regresar a la vista diseño 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 código

Aceptar.Enabled = true;

Este código habilitaría el botón de aceptar

Adjuntar también a dicha solución el archivo funciones. cs que también se incluyen

en este manual.

Para adjuntar el archivo a la solución, copiar el archivo a la carpeta raíz de la

solución, como en la siguiente imagen:

Page 11: Manual de C#

11 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Después 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 opción "incluir en el proyecto", como se muestra en la siguiente

imagen

Page 12: Manual de C#

12 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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 diseñador en el visual

estudio y dar doble clic en el botón guardar y pegar el siguiente código:

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

Page 13: Manual de C#

13 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

de datos, antes de ejecutarlos

query=""; / Asegurarse que la variable

esté vacía

fn.Cn = new

OleDbConnection("Provider=SQLOLEDB;User

id=sa;Password=hola;Initial Catalog=Curso;Data

Source=DESKTOP\\SQLEXPRESS;"); //Esta es la cadena de conexión

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 conexión

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 ejecución del query en el datareader

if(DR.Read()){//condicionar, si el datareader

tiene datos entonces el usuario existe de lo contrario ejecutará

el código del else

label3.Text="";

label3.Text="Bienvenido :" +

DR["NomUsuario"];

fn.Conectado = true;//cierra la conexión

hacia la base de datos

this.Close();//esta línea de código cerrará

la aplicación. Pues el usuario especificado ha sido encontrado

y deberá mostrar la ventana principal de la aplicación.

}else{//este fragmento de código se ejecutará,

Page 14: Manual de C#

14 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

si, no se encuentra el usuario especificado en la base de datos

label3.Text="Usuario o Contraseña";

pwd.Text="";

pwd.Focus();

fn.Cn.Close();//cierra la conexión hacia la

base de datos

}//fin de botón guardar

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

presentación:

Una vez terminado el botón guardar, agregar 4 ventanas más, 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 código:

if (fn.Conectado == true)

Page 15: Manual de C#

15 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Application.Run(new Menu());

Dentro de la siguiente función

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

}

De manera que el código quede de como el que a continuación se muestra

static void Main()

{

Application.EnableVisualStyles();

Application.SetCompatibleTextRenderingDefault(false);

Application.Run(new Form1());

if (fn.Conectado == true)//En este if evalúa si la

conexión 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 múltiples

documentos), para hacer esto posible cambiar la propiedad isMdiContainer a true,

como se muestra en las siguientes imágenes.

Page 16: Manual de C#

16 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Después de cambiar la propiedad de la forma, esperar los cambios, el más notable

es el cambio de color del fondo.

Page 17: Manual de C#

17 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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 continuación:

Page 18: Manual de C#

18 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Lo primero que se programa es la última opción “salir” presionando doble clic

encima de la palabra lo cual llevará al evento y agregar el siguiente código:

fn.Cn.Close();//cierra la conexión con la base de

datos

this.Close();//cierra la aplicación

Ahora al programar la opción Eventos 2, hacer doble clic en la palabra así como en

la opción anterior:

vEventos2 frmEventos = new vEventos2();

frmEventos.MdiParent = this;

frmEventos.Show();

Con el código de la primera línea, se crea una variable llamada frmEventos del tipo

vEventos2 que es la forma eventos 2 que se agregó anteriormente, la segunda línea

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 solución las cuales estarán disponibles, la última línea lanza la

ventana Eventos 2.

Para la opción de eventos, volver a la vista diseño y dar doble clic sobre la opción

Eventos y pegar el siguiente código:

//ventana MDI child

vEventos fdmeventos = new vEventos();

fdmeventos.MdiParent = this;

Page 19: Manual de C#

19 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

fdmeventos.Show();

Para la opción niveles, volver a la vista diseño y sobre la opción del menú niveles

pegar el siguiente código:

//ventana SDI-> este tipo de ventana no permite interactuar con

otras ventanas abiertas

vNiveles frmNiveles = new vNiveles();

frmNiveles.ShowDialog();

Se procede a la programación de la venta de Niveles la cual contendrá los

niveles de la aplicación, esta ventana tiene la particularidad de ser de tipo SDI, lo

cual quiere decir que no se podrá interactuar con otras ventanas de la aplicación,

mientras esta ventana se encuentre abierta, este tipo de ventanas se podrán

localizar cuando se está en una pantalla de impresión o en una de preferencias

entre otras.

Abrir la forma de niveles, a la cual se agrega un DataGridView, y un botón de tal

suerte que la forma quede como la que se muestra a continuación:

Lo primero que se hará es:

Agregar la librería de acceso a base de datos.

using System.Data.OleDb;

Page 20: Manual de C#

20 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Un poco más abajo en la sección public partial class vNiveles : Form

declarar la siguientes variables

//declarar una variable adaptador

OleDbDataAdapter adaptador;

//agregar instancia al dataset

DataSet Ds = new DataSet();

Después en la vista diseño dar doble clic en la forma para llamar el evento load de la

misma y agregamos el siguiente código:

String query;

//Deshabilitar el botón guardar

Guardar.Enabled = false;

//mandar dos parámetros al adaptador query y la conexión a la base

de datos

query = "";

query = "Select idNivel, DescNivel as 'Nombre del Nivel' from

Nivel";

adaptador = new OleDbDataAdapter(query, fn.Cn);

//El query se ejecutará al momento de llenar el DataSet

//al adaptador se le envían dos parámetros, 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 visualización

de los datos

dataGridView1.Columns[1].Width = 250;

Lo siguiente es programar un botón de guardar, regresar a la vista diseño de la

forma y dar doble clic en el botón de guardar y pegar el siguiente código:

//crear un oledbcomanbuilder

OleDbCommandBuilder cb = new OleDbCommandBuilder(adaptador);

//el OleDbComandBuilder, creará automáticamente todos query

necesarios

//si hay una modificación 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 botón de guardar

Ds.Tables["xNiveles"].AcceptChanges();

Guardar.Enabled = false;

Ahora habilitar el botón 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 diseño y dar clic sobre ella, después ir a la caja de

Page 21: Manual de C#

21 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

propiedades y buscar KeyPreview, ponerlo en true, después 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 código:

//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

botón 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 aplicación para hacer otras

modificaciones.

Page 22: Manual de C#

22 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Ahora, programar la opción Eventos, para ello, dar doble clic sobre la palabra

eventos del menú, en el evento que se crea, pegar el siguiente código:

vEventos fdmeventos = new vEventos();

fdmeventos.MdiParent = this;

fdmeventos.Show();

Este código es igual que el del evento anterior, pero la diferencia entre esta y la

ventana anterior se hace a continuación. Abrir la forma eventos y agregar un

dataGridView, y un botón la ventana, será como la siguiente:

Al botón que se agregó, cambiar el nombre por el de guardar, así como el texto.

Cambiar al código de la ventana y agregar la siguiente línea de código que es la

librería de acceso a datos, tal y como se hizo al inicio del proyecto:

using System.Data.OleDb;

Un poco más abajo en el código buscar el evento:

public partial class vEventos : Form

Y agregar el siguiente código:

OleDbDataAdapter adapNiv;

OleDbDataAdapter adapEven;

DataSet DS = new DataSet();

Page 23: Manual de C#

23 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

En donde se declaran dos OleDbDataAdaptar y un data set que se utilizarán a

continuación. Una vez hecho esto, volver a la vista diseño y presionar dando doble

click sobre la forma para llamar al evento load de esta forma, y pegar el siguiente

código:

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, descripción enmascarándolo como Nombre del

evento, precio, duración 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 línea es la más 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

Page 24: Manual de C#

24 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

dataGridView1.Columns[0].Visible = false;//ocultar

la primera columna ya que aquí está el id, y esta info, el usuario

no tiene razón de verla

dataGridView1.Columns[4].Visible = false;//ocultar

la columna ya que aquí está el id, y esta info, el usuario no tiene

razón de verla

dataGridView1.Columns[1].Width = 300; //ensanchar

esta columna para una mejor visualización de la información

Guardar.Enabled = false;//desactivar el botón

guardar ya que al momento de hacer la primera no hay cambios que

guardar

Una vez terminado el código 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 catálogo de niveles, ahora se debe validar que cuando el usuario introduzca un

valor en la columna de precio, éste sea realmente un número y no un carácter

distinto, para hacer esto, ir a la vista diseño y dar clic sobre el datagridview, después

dirigirse hacia la caja de propiedades, y en la parte superior ubicar el ícono de un

pequeño rayo, dar clic para que se despliegue los eventos disponibles de este

objeto, buscar el evento CellValidating, y dar doble clic, ello conducirá al código de

este evento, es en esta parte donde se pega el siguiente código:

Page 25: Manual de C#

25 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

dataGridView1.Rows[e.RowIndex].ErrorText = "";//limpia todos

los mensajes de error del datagridview

float nuevoPrecio; //declara una variable de tipo float para hacer

la validación más adelante

if (dataGridView1.Rows[e.RowIndex].IsNewRow)//revisa si es un

renglón nuevo, y si lo es no valida nada

return;//sale de la validación

if (e.ColumnIndex == 2)//si se modifica la columna del valor

{

if (!float.TryParse(e.FormattedValue.ToString(), out

nuevoPrecio))//revisa si es numérico 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";

}

}

Aún cuando se h agregado el código anterior, la validación no está completa, para

que lo esté, se necesita regresar a la vista diseño 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 código:

if (DS.HasChanges())//Evalúa si el DataSet tiene algún cambio de

ser así habilitará el botón 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 botón de guardar, para

ello regresar a la vista diseño y dar clic en el botón de guardar y pegar el siguiente

código:

OleDbCommandBuilder CB = new OleDbCommandBuilder(adapEven);

adapEven.Update(DS, "xEventos");

DS.Tables["xEventos"].AcceptChanges();

Guardar.Enabled = false;

En este código, crear una variable de tipo OleDbComandBuilde, enlazada al

datagridview, una vez realizado, indicarle que acepte los cambios hechos y

deshabilitar nuevamente el botón 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

tendrán botones de control (minimizar, maximizar y cerrar), una ventana MDI en la

cual se pueda encapsular y ordenar las ventanas de la aplicación, MDIClid la cual

Page 26: Manual de C#

26 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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 aplicación

y permite interactuar con otras ventanas dentro de la aplicación, también 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.

Page 27: Manual de C#

27 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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 aplicación, el primero tiene

la extensión aspx y el segundo aspx.cs la diferencia entre el primero y el segundo es

Page 28: Manual de C#

28 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

que el primero contiene el código html requerido para la ejecución de la aplicación y

el archivo cs contiene el código cd C#.

Antes de comenzar, se requiere agregar la librería de acceso a base de datos, esto

en al archivo aspx.cs:

using System.Data.OleDb;

Después un poco más abajo en la siguiente sección public partial class Default2 : System.Web.UI.Page

Agregar el siguiente código que es la cadena de conexión a bases de datos

OleDbConnection Cn = new OleDbConnection("Provider=SQLOLEDB;User id

=sa;Password = hola;Initial Catalog=Curso;Data

Source=DESKTOP\\SQLEXPRESS;");

Después regresar a la vista diseño del proyecto y dar doble clic en el lienzo para

llamar el evento load de la nueva página y pegar el siguiente código:

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

descripción y ordenarlos por la descripción

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 descripción 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 conexión con la base de datos

}

Volver a la vista diseño del sitio y dar clic en el botón de Abrir documento y pegar el

siguiente código:

Page 29: Manual de C#

29 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

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

El cual al presionar el botón, 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 botón de guardar, regresar a la vista diseño de la página y dar

doble clic en el botón y pegar el siguiente código:

FileStream archivo;

//Parámetros para procedimiento almacenado

int tam;

string nom, ruta;

if (FileUpload1.HasFile)

{

try//cachador de errorres

{

//Obtener parámetros a utilizar

nom = FileUpload1.FileName;

tam = FileUpload1.FileBytes.Length;

//NOTA: EL ARCHIVO PDF PRIMERO LO GUARDO EN UNA CARPETA

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 dirección de los parámetros

usrPk.Value = TUsr.Text;

usrPk.Direction = ParameterDirection.Input;

nomusr.Value = TNomUsr.Text;

nomusr.Direction = ParameterDirection.Input;

pwdusr.Value = TPass.Text;

pwdusr.Direction = ParameterDirection.Input;

Page 30: Manual de C#

30 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

TipoSPk.Value = idTS;

Foto.Value = imagen;

Foto.Size = imagen.Length;

Foto.Direction = ParameterDirection.Input;

//agregar parámetros 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 código anterior se sube el archivo al servidor y lo guarda en el directorio

“archivos” del servidor, sin antes revisar el tamaño 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 envían variables propias

para su correcta inserción en la base de datos y al finalizar se despliega el mensaje

de “Registro Guardado Satisfactoriamente”, el sitio debería de verse como en la

siguiente imagen:

Page 31: Manual de C#

31 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

Y si todo el código está funcionando debidamente mostrara el mensaje de la

siguiente manera:

Una vez que esto funciona adecuadamente se genera una nueva página la cual

será llamada default2.aspx

Una vez creada, ir al código de la pagina y pegar el siguiente código:

using System.Data.OleDb;

que es la librería 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 código es el siguiente:

OleDbConnection Cn = new OleDbConnection("Provider=SQLOLEDB;User id

=sa;Password = hola;Initial Catalog=Curso;Data

Source=DESKTOP\\SQLEXPRESS;");

Después regresar a la vista diseño de el sitio y dar doble clic en el lienzo para que

conduzca al evento load y pegar el siguiente código:

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

Page 32: Manual de C#

32 Prof. Jorge Luis Hernández Cervantes Victoria, Guanajuato, 16 de Octubre de 2012 @jl_cervantes [email protected]

un usuario con el nombre especificado regresar a la imagen almacenada en la

base de datos

comando.Connection.Open();//abrir la conexión

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 conexión hacia la base de

datos

La ejecución de la página deberá apreciarse así: