Manual de C#
Transcript of 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#
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
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.
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.
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:
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
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.
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:
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.
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:
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
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
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á,
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)
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.
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.
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:
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;
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;
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
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.
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();
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
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:
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
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.
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
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:
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;
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:
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
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í: