UNIVERSIDAD DON BOSCO FACULTAD DE ESTUDIOS TECNOLÓGICOS ESCUELA DE COMPUTACIÓN CICLO: 01/2015 Nombre de la Práctica: Lugar de Ejecución: Tiempo Estimado: MATERIA: DOCENTES: GUIA DE LABORATORIO #5 Conectando a Fuentes de Datos – Parte II Centro de cómputo 2 horas con 30 minutos Lenguaje de Programación II Karens Medrano / Hugo Dimas II. INTRODUCCIÓN TEÓRICA Terminología de Bases de Datos: Una Base de Datos es un fichero electrónico (o conjunto de ficheros) que permite almacenar información de manera estructurada. Una Base de Datos Relacional es un modelo de base de datos que almacena la información en Tablas. Cada Tabla, almacena un conjunto específico de datos estructurados. Una tabla contiene una colección de filas (tuplas o registros) y columnas (campos o atributos). Cada Columna de la tabla posee un nombre, y un Tipo de Dato, que define la información que podrá almacenar. Por ejemplo: fechas, nombres, importes en moneda o números. Las Tablas poseen además, restricciones como ser la “Clave Primaria”, que asegura la unicidad de los datos en la tabla; además de relaciones o claves foráneas con otras tablas, implementando integridad referencial. ADO.NET ADO.NET es un conjunto de componentes del software que pueden ser usados por los programadores para acceder a datos y a servicios de datos. Es una parte de la biblioteca de clases base que están incluidas en el Microsoft .NETFramework. Es comúnmente usado por los programadores para acceder y para modificar los datos almacenados en unSistema Gestor de Bases de Datos Relacionales, aunque también puede ser usado para acceder a datos en fuentes no relacionales. ADO.NET es a veces considerado como una evolución de la tecnología ActiveX Data Objects (ADO), pero fue cambiado tan extensivamente que puede ser concebido como un producto enteramente nuevo. ADO.NET consiste en dos partes primarias: Data provider: estas clases proporcionan el acceso a una fuente de datos, como Microsoft SQL Server y Oracle. Cada fuente de datos tiene su propio conjunto de objetos del proveedor, pero cada uno tienen un conjunto común de clases de utilidad: Connection: Proporciona una conexión usada para comunicarse con la fuente de datos. También actúa como Abstract Factory para los objetos command. Command: Usado para realizar alguna acción en la fuente de datos, como lectura, actualización, o borrado de datos relacionales. Parameter: Describe un simple parámetro para un command. Un ejemplo común es un parámetro para ser usado en un procedimiento almacenado. DataAdapter: "Puente" utilizado para transferir data entre una fuente de datos y un objeto DataSet (ver abajo). DataReader: Es una clase usada para procesar eficientemente una lista grande de resultados, un registro a la vez. Lenguaje de Programación II 1 / 20 Guía #4: Conectando a Fuentes de Datos – Parte I DataSets: los objetos DataSets, son un grupo de clases que describen una simple base de datos relacional en memoria, fueron la estrella del show en el lanzamiento inicial (1.0) del Microsoft .NET Framework. Las clases forman una jerarquía de contención: Un objeto DataSet representa un esquema (o una base de datos entera o un subconjunto de una). Puede contener las tablas y las relaciones entre esas tablas. o Un objeto DataTable representa una sola tabla en la base de datos. Tiene un nombre, filas, y columnas. Un objeto DataView "se sienta sobre" un DataTable y ordena los datos (como una cláusula "order by" de SQL) y, si se activa un filtro, filtra los registros (como una cláusula "where" del SQL). Para facilitar estas operaciones se usa un índice en memoria. Todas las DataTables tienen un filtro por defecto, mientras que pueden ser definidos cualquier número de DataViews adicionales, reduciendo la interacción con la base de datos subyacente y mejorando así el desempeño. Un DataColumn representa una columna de la tabla, incluyendo su nombre y tipo. Un objeto DataRow representa una sola fila en la tabla, y permite leer y actualizar los valores en esa fila, así como la recuperación de cualquier fila que esté relacionada con ella a través de una relación de clave primaria clave extranjera. Un DataRowView representa una sola fila de un DataView, la diferencia entre un DataRow y el DataRowView es importante cuando se está interactuando sobre un resultset. Un DataRelation es una relación entre las tablas, tales como una relación de clave primaria - clave ajena. Esto es útil para permitir la funcionalidad del DataRow de recuperar filas relacionadas. Un Constraint describe una propiedad de la base de datos que se debe cumplir, como que los valores en una columna de clave primaria deben ser únicos. A medida que los datos son modificados cualquier violación que se presente causará excepciones. Un DataSet es llenado desde una base de datos por un DataAdapter cuyas propiedades Connection y Command que han sido iniciados. Sin embargo, un DataSet puede guardar su contenido a XML (opcionalmente con un esquema XSD), o llenarse a sí mismo desde un XML, haciendo esto excepcionalmente útil para los servicios web, computación distribuida, y aplicaciones ocasionalmente conectadas desconectados. Acceso a Bases de Datos Relaciónales Escenario Conectado Un entorno conectado es uno en el cual los usuarios están constantemente conectados a la fuente de datos Ventajas: Mayor seguridad Mejor control de concurrencia Los datos se mantienen actualizados Desventajas: Se requiere una conexión constante (consume recursos del servidor) Escalabilidad Acceso a Bases de Datos Relacionales Escenario Desconectado En un entorno desconectado, una parte de los datos del repositorio central se copia y modifica en forma local, para luego sincronizarse con éste. Ventajas Se puede trabajar en forma independiente Mayor escalabilidad y performance Lenguaje de Programación II 2 Guía #4: Conectando a Fuentes de Datos – Parte I Desventajas Los datos no están sincronizados Resolución manual de conflictos System.Data Es el espacio de nombres de ADO .NET. Tareas habituales en la programación de aplicaciones que gestionan bases de datos: o Establecer una conexión con la Base de Datos. o Solicitar al Servidor datos específicos. o El Servidor retorna los datos solicitados. o El Usuario modifica los datos, y envía las actualizaciones al Servidor. o Se cierra la conexión. La gestión de datos se puede realizar en línea, o en un proceso desconectado. ADO .NET ofrece un modelo unificado de desarrollo a lo largo de la Plataforma .NET, independiente al lenguaje de Programación (Visual Basic .NET, C#, etc.) e independiente a la arquitectura de la aplicación a desarrollar (aplicación de escritorio, aplicación web, aplicación de consola, etc.). III. MATERIALES Y EQUIPO Para la realización de la guía de práctica se requerirá lo siguiente: No. 1 2 3 Requerimiento Guía de práctica #4: Conectando a Fuentes de Datos – Parte I Computadora con Visual Studio 2012 instalado Memoria USB o disco flexible Cantidad 1 1 1 IV. PROCEDIMIENTO Ejercicio #1 – Creación de base de datos usando SQL Server 2012 para que funcione como fuente de datos. 1. Proceda a iniciar la herramienta de Microsoft SQL Server Management Studio instalada en su computadora, una vez cargada, proceda a ejecutar el script que se le proporciona en los recursos de esta guía. Asegúrese que la base de datos “Bolsa_Trabajo” no se encuentre creada, de ser así elimínela y proceda a crearla nuevamente con la ayuda del script proporcionado. Cuando ya haya ejecutado todas las querys, proceda a verificar mediante un diagrama las relaciones entre las tablas, las cuales deben verse como se muestra a continuación: Lenguaje de Programación II 3 Guía #4: Conectando a Fuentes de Datos – Parte I Ejercicio #2 – Creación de conexión desde Visual Studio con el origen de datos a través del asistente. 1. Proceda a iniciar Microsoft Visual Studio desde su computadora. Una vez cargado el IDE en pantalla procederemos a crear la conexión de tal manera que esta se encuentre activa desde nuestra ventana. De esta manera se podrá administrar los objetos de bases de datos desde el IDE. Para ello, proceda a iniciar el explorar de servidores, desde el menú “Ver”, “Explorador de Servidores”. Podrá observar que se carga una nueva ventana listando los diferentes servidores asociados a la aplicación. El que nos interesa por el momento es el que indica “Conexiones de datos”. Desde este punto procederemos a agregar una nueva conexión, para ello proceda a dar clic derecho sobre el icono asociado a servidores de base datos, automáticamente verá un menú emergente del cual deberá seleccionar la opción de “Agregar conexión”. 2. Se nos mostrará una ventana donde se nos solicita especificar los parámetros de conexión a nuestro servidor. Estos parámetros son los que se explican en la introducción teórica de esta guía de laboratorio. Procederemos a llenar el formulario presentado de la siguiente forma: del campo de servidor, seleccione el servidor asociado a su instancia de SQL Server instalada en su computadora. Para la conexión al servidor se debe usar conexión con autenticación de Windows. Posteriormente seleccione la base de datos que creo usted en el inicio de esta guía. La configuración anterior debe quedar como muestra la siguiente imagen. Finalmente de clic en el botón de probar conexión el cual nos indicara si se ha podido establecer la conexión y si esta ha sido satisfactoria y luego de clic en Aceptar. Lenguaje de Programación II 4 Guía #4: Conectando a Fuentes de Datos – Parte I 3. Una vez creada la conexión, procederemos a configurar la cadena de conexión en nuestro archivo web.config, ya que de esta manera se podrá mantener una sola cadena de conexión en todo el sitio. Para ello, de clic derecho sobre la conexión antes establecida y proceda a dar clic en “Propiedades” del menú emergente. Una vez se carguen las propiedades de la conexión, proceda a copiar la propiedad “Cadena de conexión” de la ventana de propiedades. Debe conservar los datos en memoria. Verifique la siguiente imagen. Lenguaje de Programación II 5 Guía #4: Conectando a Fuentes de Datos – Parte I 4. Ahora, proceda a editar e archivo web.config de su sitio web, para agregar las siguientes líneas de código. En la etiqueta “connectionString” debe colocar el valor de la cadena de conexión copiada en el punto anterior. Al final debe quedarle como se muestra a continuación: <connectionStrings> <add name="CadenaConexion" connectionString="Data Source=REEG;Initial Catalog=Bolsa_Trabajo;Integrated Security=True" providerName="System.Data.SqlClient" /> </connectionStrings> Lo que se acaba de realizar es la adición de las cadenas de conexión en el web.config de tal manera que se encuentre disponible en todos nuestros archivos de código del proyecto. Esto es de suma utilidad ya que en casos de que se necesite cambiar la cadena de conexión, únicamente se modifica este archivo a las nuevas referencias de la fuente de datos, sin estar cambiando una a una las conexiones existentes. La etiqueta de conexión describe una propiedad “name” la cual establece el nombre con la que estableceremos nuestra conexión desde el código en C#. La propiedad “connectionString” establece la ruta al servidor de base de datos y la base de datos misma. Finalmente el “providerName” establece el espacio de nombres del proveedor de datos que utilizaremos para la gestión de nuestra conexión. 5. Una vez creado nuestro sitio web, procederemos a configurar las condiciones de trabajo del mismo mediante la creación de carpetas y archivos. Para ello cree 4 carpetas en la raíz del sitio según el detalle de la siguiente tabla. El contenido de cada carpeta se encuentra como recurso de esta guía, por lo que debe de proceder a adicionar el contenido de cada una de las carpetas como ya lo ha realizado anteriormente. Carpeta css fonts images js 6. Ahora, proceda a agregar un nuevo Web Form con nombre “Default.aspx”, y luego digite el siguiente marcado. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE HTML> <html> Lenguaje de Programación II 6 Guía #4: Conectando a Fuentes de Datos – Parte I <head> <title>Bolsa de Trabajo en Línea - Universidad Don Bosco</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]--> <script src="js/jquery.min.js"></script> <script src="js/jquery.scrolly.min.js"></script> <script src="js/jquery.dropotron.min.js"></script> <script src="js/jquery.scrollex.min.js"></script> <script src="js/skel.min.js"></script> <script src="js/skel-layers.min.js"></script> <script src="js/init.js"></script> <noscript> <link rel="stylesheet" href="css/skel.css" /> <link rel="stylesheet" href="css/style.css" /> <link rel="stylesheet" href="css/style-xlarge.css" /> </noscript> <!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]--> <!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]--> </head> <body> <!-- Header --> <header id="header" class="skel-layers-fixed"> <h1 id="logo"><a href="/">Página Principal</a></h1> <nav id="nav"> <ul> <li><a href="NuevaOferta.aspx" class="button special">Nueva Oferta</a></li> </ul> </nav> </header> <!-- Main --> <div id="main" class="wrapper style1"> <div class="container"> <header class="major"> <h2>Bolsa de Trabajo en Línea</h2> <p>Universidad Don Bosco</p> </header> <!-- Formulario de Ingreso de Información --> <section> <form id="form1" runat="server"> <div class="row uniform 50%"> </div> </form> </section> </div> </div> <!-- Footer --> <footer id="footer"> <ul class="icons"> <li><a href="#" class="icon alt fa-twitter"><span class="label">Twitter</span></a></li> <li><a href="#" class="icon alt fa-facebook"><span Lenguaje de Programación II 7 Guía #4: Conectando a Fuentes de Datos – Parte I class="label">Facebook</span></a></li> <li><a href="#" class="icon alt fa-envelope"><span class="label">Email</span></a></li> </ul> <ul class="copyright"> <li>© 2015. All rights reserved.</li> </ul> </footer> </body> </html> 7. Dentro del marcado anterior, ubique el div que tiene como clase “row uniform 50%” ya que es al interior de este div que colocaremos el contenido de la página. Dentro de este div procederemos a crear 3 DropDownList, un botón y un GridView, por lo que digite el siguiente marcado dentro de este div. <div class="4u 12u$(xsmall)"> Categoría <div class="select-wrapper"><asp:DropDownList ID="ddlCategorias" runat="server"></asp:DropDownList></div> </div> <div class="3u 12u$(xsmall)"> Localidad <div class="select-wrapper"><asp:DropDownList ID="ddlLocalidades" runat="server"></asp:DropDownList></div> </div> <div class="3u 12u$(xsmall)"> Empresa <div class="select-wrapper"><asp:DropDownList ID="ddlEmpresas" runat="server"></asp:DropDownList></div> </div> <div class="2u 12u$(xsmall)"> <br /> <asp:Button ID="btnBuscar" runat="server" Text="Buscar" Width="100%" CssClass="special"/> </div> <asp:GridView ID="GridView1" runat="server"></asp:GridView> 8. Ahora, procederemos a configurar el GridView agregado en el punto anterior, para ello, desde la pestaña de opciones generales, seleccione la opción “Elegir origen de datos” y luego en “Nuevo origen de datos”. Con esto, crearemos un control SQLDataSource que sea enlazado con el GridView. En el cuadro de “Tipo de origen de datos” seleccione “Base de Datos” y colóquele como nombre “SQLDataSource1”. Refiérase por las figuras. Lenguaje de Programación II 8 Guía #4: Conectando a Fuentes de Datos – Parte I 9. En la ventana de conexión de datos, seleccione “cadenaConexion” que es la cadena que se configuro anteriormente. Posteriormente se nos pedirá que ingresemos la consulta, para ello, seleccione “Especificar una consula SQL…” e ingrese la siguiente consulta. Posteriormente de clic en siguiente. SELECT categorias.sNombreCategoria, ofertas.nIdOferta, ofertas.sTituloOferta, nTipoContrato = CASE ofertas.nTipoContrato WHEN 1 THEN 'Permanente' WHEN 2 THEN 'Por proyecto' END, nTipoJornada = CASE ofertas.nTipoJornada WHEN 1 THEN 'Tiempo Completo' WHEN 2 THEN 'Por horas' END, ofertas.fSalario, ofertas.dFechaPublicacion, empresas.sNombreEmpresa, municipios.sNombreMunicipio FROM municipios INNER JOIN ofertas ON municipios.nIdMunicipio = ofertas.nIdLocalidad INNER JOIN empresas ON ofertas.nIdEmpresa = empresas.nIdEmpresa INNER JOIN categorias ON ofertas.nIdCategoria = categorias.nIdCategoria WHERE categorias.nIdCategoria = @nIdCategoria AND municipios.nIdMunicipio = @nIdMunicipio AND empresas.nIdEmpresa = @nIdEmpresa 10. Como usted puede ver anteriormente, en la anterior consulta se ha aplicado un filtro de 3 parámetros, los cuales son representados por un símbolo de arroba (@) al principio. Estos tres filtros corresponden a la categoría, empresa y municipio. El siguiente paso es indicarle a ASP que debe tomar el valor de los parámetros desde los 3 controles DropDownList provistos con anterioridad. Para ello, para cada uno de los parámetros, seleccione como “Origen de parámetro” el valor de “control”, y como “ControlID” seleccione “ddlEmpresas” si el parámetro corresponde a empresas, “ddlCategorias” si el parámetro corresponde a categorías y “ddLocalidades” si corresponde a las localidades. Como valor por defecto coloque 1 en los tres casos. De clic en siguiente y luego en finalizar. Lenguaje de Programación II 9 Guía #4: Conectando a Fuentes de Datos – Parte I 11. De clic en el botón de opciones del GridView1 y seleccione la opción de “Editar Columnas”, cambie el nombre de cada una de las columnas que se muestran en la tabla a un nombre más natural. Además para el campo de “Fecha de Publicación” cambie la propiedad “DataFormatString” a “{0:d}” y para el campo de “Salario” coloque la misma propiedad en “${0}”. Guíese por la siguiente imagen: 12. Procederemos ahora a agregar una columna, para ello, siempre en el editor de columnas, seleccione dentro del nodo “CommandField”, la opción de “Seleccinar”, de clic en el botón de agregar y proceda a configurar la nueva columna estableciendo como “Header Text” el valor de “Editar”, como “Button Type” seleccione “Image”, con la propiedad “SelectImageUrl” busque “edit_flat_icon.png” dentro de Lenguaje de Programación II 10 Guía #4: Conectando a Fuentes de Datos – Parte I la carpeta “images”. Dentro de la sección de estilos, despligue el nodo “Control Style” y coloque un Width de 50px. De clic en Aceptar. Lenguaje de Programación II 11 Guía #4: Conectando a Fuentes de Datos – Parte I 13. Procederemos ahora a agregar una nueva columna, para ello, siempre en el editor de columnas, agregue un nuevo CommandField de tipo Eliminar. Configure las propiedades como sigue: nombre de coolumna “Header Text” con valor de “Eliminar”, como “Button Type” seleccione “Image”, con la propiedad “DeleteImageUrl” busque “eliminar_icon_flat.png” dentro de la carpeta “images”. Dentro de la sección de estilos, despligue el nodo “Control Style” y coloque un Width de 40px. De clic en Aceptar. 14. Ahora, procederemos a establecer una propiedad dentro del GridView1 que es de suma importancia, ya que de esta manera, se le establece que el valor que devolverá por cada operación sea la llave de la tabla, por lo que ubíquese en la vista de código dentro de la página Default.aspx y dentro de esta ubique la propiedad “DataKeyNames”, si no existe digítela y luego asígnele el valor de “nIdOferta” 15. Una vez concluido esto, nos resta programar los controles de DropDownList. Para ello, cree una nueva clase con el nombre de “conexion.cs”, y digite el siguiente código. Tome especial cuidado de que se han incluido los espacios de nombres orientados a datos como System.Data.SQLClient. using using using using using using using using System; System.Collections.Generic; System.Linq; System.Web; System.Data.SqlClient; System.Configuration; System.Web.UI.WebControls; System.Data; public class conexion { private String cadenaConexion; private SqlConnection conexionSQL; public conexion() { this.cadenaConexion = ConfigurationManager.ConnectionStrings["CadenaConexion"].ConnectionString; } public bool conectar() { try { Lenguaje de Programación II 12 Guía #4: Conectando a Fuentes de Datos – Parte I this.conexionSQL = new SqlConnection(this.cadenaConexion); this.conexionSQL.Open(); return true; } catch (Exception e) { return false; } } public bool estadoConexion() { switch (this.conexionSQL.State) { case System.Data.ConnectionState.Broken: return true; case System.Data.ConnectionState.Open: return true; default: return false; } } public void desconectar() { this.conexionSQL.Close(); } public void getCategorias(ref DropDownList combobox) { SqlCommand comando = new SqlCommand(); SqlDataReader lector; comando.CommandType = System.Data.CommandType.Text; comando.CommandText = "SELECT * FROM categorias ORDER BY sNombreCategoria"; comando.Connection = this.conexionSQL; try { combobox.Items.Clear(); lector = comando.ExecuteReader(); if (lector.HasRows) { while (lector.Read()) { combobox.Items.Add(new ListItem(lector.GetString(1), lector[0].ToString())); } lector.Close(); } } catch (SqlException error) { } } public void getLocalidades(ref DropDownList combobox) { SqlCommand comando = new SqlCommand(); SqlDataReader lector; Lenguaje de Programación II 13 Guía #4: Conectando a Fuentes de Datos – Parte I comando.CommandType = System.Data.CommandType.Text; comando.CommandText = "SELECT * FROM municipios ORDER BY sNombreMunicipio"; comando.Connection = this.conexionSQL; try { combobox.Items.Clear(); lector = comando.ExecuteReader(); if (lector.HasRows) { while (lector.Read()) { combobox.Items.Add(new ListItem(lector.GetString(1), lector["nIdMunicipio"].ToString())); } lector.Close(); } } catch (SqlException error) { } } public void getEmpresas(ref DropDownList combobox) { SqlCommand comando = new SqlCommand(); SqlDataReader lector; comando.CommandType = System.Data.CommandType.Text; comando.CommandText = "SELECT * FROM empresas ORDER BY sNombreEmpresa"; comando.Connection = this.conexionSQL; try { combobox.Items.Clear(); lector = comando.ExecuteReader(); if (lector.HasRows) { while (lector.Read()) { combobox.Items.Add(new ListItem(lector.GetString(1), lector.GetInt32(0).ToString())); } lector.Close(); } } catch (SqlException error) { } } public int nuevaOferta(int nIdEmpresa, String sTituloOferta, int nTipoJornada, int nTipoContrato, double fSalario, int nIdLocalidad, int nTipoLocalidad, int nIdCategoria, String fechaPublicacion, String sDescripcion, String fechaContratacion, int nVacantes ) { String queryInsert = "INSERT INTO ofertas(nIdEmpresa, sTituloOferta, nTipoJornada, Lenguaje de Programación II 14 Guía #4: Conectando a Fuentes de Datos – Parte I nTipoContrato, fSalario, nIdLocalidad, nTipoLocalidad, nIdCategoria, dFechaPublicacion, sDescripcion, fechaContratacion, nVacantes) VALUES(@p1, @p2, @p3, @p4, @p5, @p6, @p7, @p8, @p9, @p10, @p11, @p12)"; SqlCommand comando = new SqlCommand(); comando.CommandType = System.Data.CommandType.Text; comando.CommandText = queryInsert; comando.Connection = this.conexionSQL; try { comando.Parameters.AddWithValue("@p1", nIdEmpresa); comando.Parameters.AddWithValue("@p2", sTituloOferta); comando.Parameters.AddWithValue("@p3", nTipoJornada); comando.Parameters.AddWithValue("@p4", nTipoContrato); comando.Parameters.AddWithValue("@p5", fSalario); comando.Parameters.AddWithValue("@p6", nIdLocalidad); comando.Parameters.AddWithValue("@p7", nTipoLocalidad); comando.Parameters.AddWithValue("@p8", nIdCategoria); comando.Parameters.AddWithValue("@p9", fechaPublicacion); comando.Parameters.AddWithValue("@p10", sDescripcion); comando.Parameters.AddWithValue("@p11", fechaContratacion); comando.Parameters.AddWithValue("@p12", nVacantes); return comando.ExecuteNonQuery(); } catch (SqlException error) { return 0; } } } 16. Ahora, proceda a programar el evento load de la página agregando el siguiente código. protected void Page_Load(object sender, EventArgs e) { conexion conexionSQL = new conexion(); conexionSQL.conectar(); if (!Page.IsPostBack) { conexionSQL.getCategorias(ref ddlCategorias); conexionSQL.getLocalidades(ref ddlLocalidades); conexionSQL.getEmpresas(ref ddlEmpresas); conexionSQL.desconectar(); } } 17. Ahora, proceda a programar el evento clic del botón de buscar agregando el siguiente código. protected void btnBuscar_Click(object sender, EventArgs e) { GridView1.DataBind(); } 18. Ahora, proceda a crear los siguientes métodos al código siempre al mismo nivel del código del evento Load. Estos nos servirán para gestionar la selección y eliminación de registros desde el GridView. Lenguaje de Programación II 15 Guía #4: Conectando a Fuentes de Datos – Parte I protected void GridView1_SelectedIndexChanging(object sender, GridViewSelectEventArgs e) { int nIdOferta = Convert.ToInt32(GridView1.DataKeys[e.NewSelectedIndex].Value); Response.Redirect(string.Format("EditarOferta.aspx?id={0}", nIdOferta)); } protected void GridView1_RowDeleting(object sender, GridViewDeleteEventArgs e) { SqlDataSource1.DeleteCommand = "DELETE FROM ofertas WHERE nIdOferta = @nIdOferta"; SqlDataSource1.DeleteParameters.Add("nIdOferta", GridView1.DataKeys[e.RowIndex].Values["nIdOferta"].ToString()); SqlDataSource1.Delete(); GridView1.DataBind(); } 19. Ahora, procederemos a enlazar los dos eventos anteriores a las acciones del grid, para ello agregue las siguientes propiedades al marcado del GridView1. Una vez hecho esto, proceda a ejecutar la página y filtre los datos con respecto a los que se almacenan en la base de datos. 20. Cree un nuevo Web Form con el nombre de “NuevaOferta.aspx” y proceda a digitar el siguiente marcado: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="NuevaOferta.aspx.cs" Inherits="NuevaOferta" %> <!DOCTYPE HTML> <html> <head> <title>Bolsa de Trabajo en Línea - Universidad Don Bosco</title> <meta http-equiv="content-type" content="text/html; charset=utf-8" /> <!--[if lte IE 8]><script src="css/ie/html5shiv.js"></script><![endif]--> <script src="js/jquery.min.js"></script> <script src="js/jquery.scrolly.min.js"></script> <script src="js/jquery.dropotron.min.js"></script> <script src="js/jquery.scrollex.min.js"></script> <script src="js/skel.min.js"></script> <script src="js/skel-layers.min.js"></script> <script src="js/init.js"></script> <noscript> <link rel="stylesheet" href="css/skel.css" /> <link rel="stylesheet" href="css/style.css" /> <link rel="stylesheet" href="css/style-xlarge.css" /> </noscript> <!--[if lte IE 9]><link rel="stylesheet" href="css/ie/v9.css" /><![endif]--> <!--[if lte IE 8]><link rel="stylesheet" href="css/ie/v8.css" /><![endif]--> </head> <body> <!-- Header --> <header id="header" class="skel-layers-fixed"> <h1 id="logo"><a href="/">Página Principal</a></h1> Lenguaje de Programación II 16 Guía #4: Conectando a Fuentes de Datos – Parte I <nav id="nav"> <ul> <li><a href="Default.aspx" class="button special">Listado de Oferta</a></li> </ul> </nav> </header> <!-- Main --> <div id="main" class="wrapper style1"> <div class="container"> <h3>Nueva oferta de trabajo</h3> <p>Ingrese la información en los campos siguientes para adicionar una nueva oferta de trabajo</p> <!-- Formulario de Ingreso de Información --> <section> <form id="form1" runat="server"> <div class="row uniform 50%"> <div class="6u 12u$(xsmall)"> <label>Empresa</label> <div class="select-wrapper"><asp:DropDownList ID="ddlEmpresas" runat="server"></asp:DropDownList></div> </div> <div class="6u 12u$(xsmall)"> <label>Título de la oferta</label> <asp:TextBox ID="txtTituloOferta" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator1" ControlToValidate="txtTituloOferta" ForeColor="Red" runat="server" ErrorMessage="Título de oferta obligatorio">*</asp:RequiredFieldValidator> </div> <div class="6u 12u$(xsmall)"> <label>Tipo de Contrato</label> <div class="select-wrapper"> <asp:DropDownList ID="ddlTipoContrato" runat="server"> <asp:ListItem Value="1">Permanente</asp:ListItem> <asp:ListItem Value="2">Por Proyecto</asp:ListItem> </asp:DropDownList> </div> </div> <div class="6u 12u$(xsmall)"> <label>Tipo de Jornada</label> <div class="select-wrapper"> <asp:DropDownList ID="ddlTipoJornada" runat="server"> <asp:ListItem Value="1">Tiempo Completo</asp:ListItem> <asp:ListItem Value="2">Por Horas</asp:ListItem> </asp:DropDownList> </div> </div> <div class="6u 12u$(xsmall)"> <label>Salario</label> <asp:TextBox ID="txtSalario" Lenguaje de Programación II 17 Guía #4: Conectando a Fuentes de Datos – Parte I runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator2" ControlToValidate="txtSalario" ForeColor="Red" runat="server" ErrorMessage="Salario obligatorio">*</asp:RequiredFieldValidator> </div> <div class="6u$ 12u$(xsmall)"> <label>Localidades</label> <div class="select-wrapper"><asp:DropDownList ID="ddlLocalidades" runat="server"></asp:DropDownList></div> </div> <div class="6u 12u$(xsmall)"> <label>Tipo de Localidad</label> <div class="select-wrapper"> <asp:DropDownList ID="ddlTipoLocalidad" runat="server"> <asp:ListItem Value="1">Área</asp:ListItem> <asp:ListItem Value="2">Proximidad</asp:ListItem> </asp:DropDownList> </div> </div> <div class="6u 12u$(xsmall)"> <label>Categoría</label> <div class="select-wrapper"><asp:DropDownList ID="ddlCategorias" runat="server"></asp:DropDownList></div> </div> <div class="6u 12u$(xsmall)"> <label>Fecha Contratación</label> <asp:TextBox ID="txtFechaContratacion" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator3" ControlToValidate="txtFechaContratacion" ForeColor="Red" runat="server" ErrorMessage="Fecha de contratación obligatorio">*</asp:RequiredFieldValidator> </div> <div class="6u 12u$(xsmall)"> <label>Vacantes</label> <asp:TextBox ID="txtVacantes" runat="server"></asp:TextBox> <asp:RequiredFieldValidator ID="RequiredFieldValidator4" ControlToValidate="txtVacantes" ForeColor="Red" runat="server" ErrorMessage="Vacantes es campo obligatorio">*</asp:RequiredFieldValidator> </div> <div class="6u$ 12u$(xsmall)"> <label>Descripción de la plaza</label> <asp:TextBox ID="txtDescripcion" TextMode="MultiLine" Columns="10" runat="server"></asp:TextBox> </div> <div class="6u 12u$(xsmall)"> <asp:Button ID="btnBuscar" runat="server" Text="Agregar Nueva Oferta" CssClass="special" OnClick="btnBuscar_Click" /> </div> <div class="12u 12u$(xsmall)"> <asp:ValidationSummary ID="ValidationSummary1" DisplayMode="BulletList" runat="server" /> </div> </div> </form> Lenguaje de Programación II 18 Guía #4: Conectando a Fuentes de Datos – Parte I </section> </div> </div> <!-- Footer --> <footer id="footer"> <ul class="icons"> <li><a href="#" class="icon class="label">Twitter</span></a></li> <li><a href="#" class="icon class="label">Facebook</span></a></li> <li><a href="#" class="icon class="label">Email</span></a></li> </ul> <ul class="copyright"> <li>© 2015. All rights </ul> </footer> alt fa-twitter"><span alt fa-facebook"><span alt fa-envelope"><span reserved.</li> </body> </html> 21. En el evento Load, digite el siguiente código. protected void Page_Load(object sender, EventArgs e) { conexion conexionSQL = new conexion(); conexionSQL.conectar(); if (!Page.IsPostBack) { conexionSQL.getCategorias(ref ddlCategorias); conexionSQL.getLocalidades(ref ddlLocalidades); conexionSQL.getEmpresas(ref ddlEmpresas); } conexionSQL.desconectar(); } 22. En el evento clic del botón, digite el siguiente código. protected void btnBuscar_Click(object sender, EventArgs e) { int resultado = 0; int nIdEmpresa = int.Parse(ddlEmpresas.SelectedValue.ToString()); String sTituloOferta = txtTituloOferta.Text; int nTipoJornada = int.Parse(ddlTipoJornada.SelectedValue.ToString()); int nTipoContrato = int.Parse(ddlTipoContrato.SelectedValue.ToString()); double fSalario = double.Parse(txtSalario.Text.ToString()); int nIdLocalidad = int.Parse(ddlLocalidades.SelectedValue.ToString()); int nTipoLocalidad = int.Parse(ddlTipoLocalidad.SelectedValue.ToString()); int nIdCategoria = int.Parse(ddlCategorias.SelectedValue.ToString()); String sFechaPublicacion = DateTime.Now.ToString("yyyy-MM-dd"); String sFechaContratacion = txtFechaContratacion.Text; String sDescripcion = txtDescripcion.Text; int nVacantes = int.Parse(txtVacantes.Text); Lenguaje de Programación II 19 Guía #4: Conectando a Fuentes de Datos – Parte I conexion conexionSQL = new conexion(); conexionSQL.conectar(); resultado = conexionSQL.nuevaOferta(nIdEmpresa, sTituloOferta, nTipoJornada, nTipoContrato, fSalario, nIdLocalidad, nTipoLocalidad, nIdCategoria, sFechaPublicacion, sDescripcion, sFechaContratacion, nVacantes); conexionSQL.desconectar(); if (resultado == 1) { Response.Redirect("Default.aspx"); } } 23. Proceda a ejecutar la página, si le da problemas con los campos de validación, proceda a corregirlos tal y como se muestra en la guía número 3. 1. V. BIBLIOGRAFÍA Thierry GROUSSARD. (2013). C# 5: Los fundamentos del lenguaje – Desarrollar con Visual Studio 2012 . Barcelona: ENI. Lenguaje de Programación II 20
© Copyright 2024