INFORMÁTICA III Universidad Tecnológica de San Juan del Río Tecnologías de la Información y Comunicación 3º Cuatrimestre
Lic. Alejandro César Valencia García
OBJETIVO Manejar y desarrollar la automatización de información, con nuevas tecnologías de programación orientada a objetos.
Visual C# (Aplicaciones Windows)
Lic. Alejandro César Valencia García
UNIDADES TEMÁTICAS I.
Aplicación de Controles
II. Creación de Controles III. Conectividad a Base de Datos
IV. Código Seguro V. Archivos de Instalación Lic. Alejandro César Valencia García
MODO DE EVALUACIÓN • Examen Práctico (40%) • Ejercicios en Clase y Tareas (50%) • Asistencia (10%) • Todos los ejercicios son individuales (a menos que se indique lo contrario), se penalizará a aquellos estudiantes que copien los ejercicios o que se retrasen en las fechas estipuladas.
Lic. Alejandro César Valencia García
VISUAL C# • Es un entorno de desarrollo de última generación, con gran parte de los elementos de Visual Studio 2005, conjuntamente con el compilador de uno de los lenguajes de programación más avanzados que existen en la actualidad: C# 2.0.
Lic. Alejandro César Valencia García
INICIAR UN PROYECTO • Ir a Archivo -> Nuevo Proyecto. 1. Seleccionar de Visual C# la opción Aplicación de Windows 2. Asignarle un nombre y una carpeta de almacenamiento
Lic. Alejandro César Valencia García
ELEMENTOS BÁSICOS • Explorador de soluciones, es una ventana que sirve para gestionar los elementos que forman parte de cada proyecto.
• Cuadro de Herramientas, contiene todos los elementos (componentes) que se pueden incluir en un proyecto. • Ventana Propiedades, permite características de los componentes.
ajustar
las
Lic. Alejandro César Valencia García
ENTORNO DE TRABAJO Cuadro de herramientas
Explorador de Soluciones
Vista Diseño
Ventana Propiedades Lic. Alejandro César Valencia García
DISEÑAR UNA INTERFAZ • Arrastra los componentes que desees al formulario, observa que cada uno tiene un nombre y propiedades. Los componentes más usados son: -Etiquetas (label) -Cajas de texto (textbox) -Botones (button)
Lic. Alejandro César Valencia García
PROGRAMAR LOS COMPONENTES • Para agregar código de programación a cada componente haz doble clic sobre él.
Lic. Alejandro César Valencia García
EJEMPLO 1 • Programa que muestra un saludo con el nombre que introduce el usuario en el textbox. label1 Label1 (a esta le
textBox1 Button1
borramos el contenido de la propiedad text)
Button2
Lic. Alejandro César Valencia García
EJEMPLO 1 • El código del botón Saludo sería: label2.Text = "Hola " + textBox1.Text;
• El código del botón Limpiar sería: label2.Text = ""; textBox1.Text = ""; textBox1.Focus(); Lic. Alejandro César Valencia García
EJERCICIOS • Realiza un programa que pida 2 números al usuario y coloca un botón para Suma, uno para Resta, uno para Multiplicación y uno para División. El resultado debe aparecer en otro textBox. (Recuerda usar Parse para convertir a entero) • Realiza un programa que resuelva el Área del Triángulo • Realiza un programa que resuelva el Área del Círculo
Lic. Alejandro César Valencia García
PROPIEDADES BÁSICAS (FORM) • BackColor: Color de fondo del formulario. • BackgroundImage: Imagen de fondo del formulario.
• BackGroundImageLayout: Forma en la que se despliega la imagen de fondo (Tile, Center, Stretch, Zoom) • ControlBox: Permite habilitar o inhabilitar la caja de control del formulario (Maximizar, Minimizar, Cerrar) • ForeColor: Color del texto sobre el formulario (label) Lic. Alejandro César Valencia García
PROPIEDADES BÁSICAS (FORM) • FormBorderStyle: Estilo del borde del formulario. Por default está en Sizable. • Icon: Icono que aparece en la barra de título del formulario (debe ser un archivo con extensión .ico) • StartPosition: Posición en la pantalla en la que se ejecuta el formulario (CenterScreen es al centro de la pantalla)
• Text: Texto que aparece en la barra de título • WindowState: Estado minimizado, etc.)
inicial
del
formulario
(maximizado,
Lic. Alejandro César Valencia García
PROPIEDADES BÁSICAS (LABEL) • BackColor: Color de fondo de la etiqueta. • BorderStyle: Estilo del borde de la etiqueta.
• Enabled: Indica si el control está habilitado • Font: Permite cambiar tipo y tamaño de letra • ForeColor: Color del texto de ese label en particular
Lic. Alejandro César Valencia García
EJERCICIOS • Realiza un programa que pida las calificaciones de las materias cursadas de un alumno de tercer cuatrimestre y calcule su promedio. Si el promedio obtenido es menor a 7, debe aparecer en rojo el color del texto. • La instrucción para cambiar el color de texto de un control es: textBox1.ForeColor=System.Drawing.Color.Red;
Lic. Alejandro César Valencia García
OTRAS PROPIEDADES • Anchor: Indica a cuáles bordes del contenedor está anclado un control. Esto permite que al cambiar el tamaño del formulario, los controles se adapten dependiendo a cuál borde estén anclados (Top, Bottom, Left, Right).
Lic. Alejandro César Valencia García
OTRAS PROPIEDADES • Multiline: Permite que un textBox sea capaz de recibir varias líneas de texto. (true, false)
• MinimumSize: Es el tamaño mínimo que un form puede tener. • MaximumSize: Es el tamaño máximo que un form puede tener. Lic. Alejandro César Valencia García
EJEMPLO • Diseña un formulario como este:
Los textBox para el domicilio y el resumen deben tener la propiedad Multiline en true. El textBox para el resumen debe tener la propiedad ReadOnly en true.
Lic. Alejandro César Valencia García
EJEMPLO • La propiedad Anchor debe quedar así: Control
Valor
Todos los label
Top, Bottom, Left
Todos los textBox excepto el de resumen
Top, Left, Right
textBox de resumen
Top, Bottom, Left, Right
Botones
Top, Right Lic. Alejandro César Valencia García
EJEMPLO • Código del botón Aceptar: string resumen;
resumen resumen resumen resumen
= "Nombre: " + textBox1.Text + "\r\n"; += "Dirección: " + textBox2.Text + "\r\n"; += "Ocupación: " + textBox3.Text + "\r\n"; += "Edad: " + textBox4.Text;
textBox5.Text = resumen;
Lic. Alejandro César Valencia García
EJEMPLO • Código del botón Ayuda: string resumen;
resumen = "Nombre = Tu nombre\r\n"; resumen += "Dirección = Tu dirección\r\n"; resumen += "Ocupación = El único valor permitido es 'Programador'\r\n"; resumen += "Edad = Tu edad"; textBox5.Text = resumen;
Lic. Alejandro César Valencia García
CONTROL RADIOBUTTON • Los botones de radio se despliegan como una etiqueta con un pequeño círculo que puede ser seleccionado o no. Se usa cuando se le quiere dar al usuario una elección entre varias opciones (por ejemplo, el sexo del usuario). • Para agrupar cajas de radio juntas se usa un control GroupBox, y dentro de él los botones de radio.
Lic. Alejandro César Valencia García
CONTROL CHECKBOX • Un CheckBox (casilla de verificación) se despliega como una etiqueta con una casilla que puede ser marcada. Se usa cuando se le dan al usuario una o más opciones posibles para seleccionar (Como un cuestionario que permite varias respuestas).
Lic. Alejandro César Valencia García
EJEMPLO • Cambia el diseño del formulario original por este: Borra el textbox y el label de Ocupación. Agrega un GroupBox y cambia su propiedad Text por Sexo. Dentro agrega 2 radiobuttons para Masculino y Femenino.
Agrega un CheckBox y cambia su propiedad Text a Programador
Lic. Alejandro César Valencia García
EJEMPLO • Nuevo código para botón Aceptar: string resumen; resumen = "Nombre: " + textBox1.Text + "\r\n"; resumen += "Dirección: " + textBox2.Text + "\r\n"; resumen += "Ocupación: " + (string)(checkBox1.Checked ? "Programador" : "No es programador") + "\r\n"; resumen += "Sexo: " + (string)(radioButton1.Checked ? "Femenino" : "Masculino") + "\r\n"; resumen += "Edad: " + textBox4.Text; textBox5.Text = resumen;
Lic. Alejandro César Valencia García
EJEMPLO • Nuevo código para el botón de Ayuda: string resumen; resumen = "Nombre = Tu nombre\r\n"; resumen += "Dirección = Tu dirección\r\n"; resumen += "Programador = Selecciona la casilla 'Programador' si es tu caso\r\n"; resumen += "Sexo = Selecciona tu sexo\r\n"; resumen += "Edad = Tu edad"; textBox5.Text = resumen;
Lic. Alejandro César Valencia García
EJEMPLO • Carencias que se observan: ▫ El nombre del usuario no debe quedar en blanco ▫ La edad del usuario debe ser un número mayor o igual a cero ▫ El domicilio del usuario no puede quedar en blanco.
Lic. Alejandro César Valencia García
VALIDACIÓN DE DATOS • Proceso para comprobar la precisión de los datos. Se puede utilizar para mostrar mensajes de error cuando los usuarios especifican valores incorrectos en un formulario.
Lic. Alejandro César Valencia García
VALIDACIÓN DE DATOS • Para evitar que el usuario deje una caja de texto en blanco, se programa en el botón de Aceptar una condición que evalúe el contenido de la misma, y mande un mensaje (con MessageBox) al usuario. if (textBox1.Text == "") { MessageBox.Show("Debe introducir un texto","Atención",MessageBoxButtons.OK,MessageBoxIcon.Error); textBox1.Focus(); }
Lic. Alejandro César Valencia García
MESSAGEBOX • Es un mensaje emergente. Su sintaxis es: MessageBox.Show("Texto del mensaje","Título del mensaje",MessageBoxButtons.OK,MessageBoxIcon.Error);
Botones que muestra
Icono que muestra
Lic. Alejandro César Valencia García
VALIDAR NÚMEROS • Para que el usuario introduzca sólo números en el textBox, primero se suscribe al evento KeyPress (cuando se presiona una tecla). Al comienzo del código se agrega la línea en negritas: public Form1() {
InitializeComponent(); this.textBox1.KeyPress += new System.Windows.Forms.KeyPressEventHandler(this.te xtBox1_KeyPress); } Lic. Alejandro César Valencia García
VALIDAR NÚMEROS • Se agrega esta función: private void textBox1_KeyPress(object sender, System.Windows.Forms.KeyPressEventArgs e) { if ((e.KeyChar < 48 || e.KeyChar > 57) && e.KeyChar != 8) e.Handled = true; }
Los únicos caracteres que se permitirá introducir en el TextBox serán los números del 0 al 9 (ASCII del 48 al 57) y se permitirá también usar el Backspace (ASCII 8) para borrar. Lic. Alejandro César Valencia García
EJERCICIO • Hacer un programa de punto de venta que pida al usuario: cantidad de artículos, descripción y precio unitario. Cada vez que se pulse el botón de Aceptar se debe calcular el subtotal de ese artículo y agregarlo a un textBox (como un ticket de compra). • Debe tener validación: cantidad de artículos y precio deben permitir solo números y la descripción no puede quedar en blanco.
Lic. Alejandro César Valencia García
VARIABLES GLOBALES • Es una variable que puede utilizarse en más de una función, ya que es pública. • Se debe declarar una clase y cada variable se declara como public static además del tipo de dato: class variables { public static string resumen; }
Lic. Alejandro César Valencia García
VARIABLES GLOBALES • Se hace referencia a ellas desde cualquier función, indicando el nombre de la clase a la que pertenecen, seguido por un punto y el nombre de la variable. variables.resumen += "Cantidad: " + textBox1.Text; textBox3.Text = variables.resumen;
Lic. Alejandro César Valencia García
NÚMEROS ALEATORIOS • Un número aleatorio es un valor generado al azar dentro de un rango específico. • En C Sharp existe una clase llamada Random que permite declarar objetos que generen números aleatorios. Random aleatorio = new Random(); int numero1 = aleatorio.Next(1, 42);
• El código anterior genera un número aleatorio entre 1 y 42 y lo almacena en la variable entera numero1. Lic. Alejandro César Valencia García
EJEMPLO (JUEGO DE ADIVINANZAS) • Programa que pide al usuario un número y genera otro (aleatorio) al presionar el botón de TIRAR. Si son iguales da un mensaje de triunfo al jugador.
Este es un label vacío que mostrará el mensaje Lic. Alejandro César Valencia García
CÓDIGO DE TIRAR Random aleatorio = new Random(); int numero = aleatorio.Next(1, 10); textBox2.Text = Convert.ToString(numero); if (int.Parse(textBox1.Text) == numero) { label3.Text = "FELICIDADES, Ganaste"; } else { label3.Text = "Sigue intentando"; } Lic. Alejandro César Valencia García
EJERCICIO • Realiza un programa de juego de lotería, donde el usuario introduzca 6 números y la PC genere otros 6 de manera aleatoria. Debes contabilizar el número de aciertos y otorgar un premio de acuerdo a lo siguiente: No. De Aciertos
Premio
6
$1,000,000.00 (un millón de pesos)
5
$100,000.00 (cien mil pesos)
4
$25,000.00 (veinticinco mil pesos)
3
$10,000.00 (diez mil pesos)
2
$1,000.00 (mil pesos)
1
Reintegro
El rango de números es entre 1 y 42, el programa debe validar que el usuario introduzca sólo números, los textBox del CPU deben ser sóloLic. lectura. Alejandro César Valencia García
COMBOBOX • Conocidos como listas desplegables, permiten al usuario seleccionar una de varias opciones, y así limitar el rango de datos que el programa va a permitir.
• Su principal propiedad es Items, en la cual se agregan los elementos de la lista desplegable. La propiedad Text corresponde al elemento seleccionado por el usuario. Lic. Alejandro César Valencia García
COMBOBOX (AGREGAR ELEMENTOS) • En la propiedad Items, haz clic en el botón correspondiente y aparecerá el siguiente cuadro:
• Escribe los elementos, uno por línea. Cada elemento se considera como string. Lic. Alejandro César Valencia García
EJEMPLO • Programa para una gasolinería. El usuario seleccionará con un combo el tipo de gasolina (Magna o Premium) y en base a la selección se mostrará el precio por litro en un textBox:
Este textBox queda como solo lectura
Lic. Alejandro César Valencia García
CÓDIGO DEL BOTÓN CALCULAR PAGO (1 DE 3) string tipo; double precio=0,total=0; int litros; tipo=comboBox1.Text; switch (tipo { case "Magna": precio = 7.50; textBox1.Text = Convert.ToString(precio); break;
Lic. Alejandro César Valencia García
CÓDIGO DEL BOTÓN CALCULAR PAGO (2 DE 3) case "Premium": precio = 10.00; textBox1.Text = Convert.ToString(precio); break; default: MessageBox.Show("Opción no válida"); comboBox1.Focus(); break; }
Lic. Alejandro César Valencia García
CÓDIGO DEL BOTÓN CALCULAR PAGO (3 DE 3) litros = int.Parse(textBox2.Text); total = litros * precio; textBox3.Text = Convert.ToString(total);
Lic. Alejandro César Valencia García
ALIMENTAR UN COMBOBOX DINÁMICAMENTE • El usuario seleccionará una zona del estado de Querétaro (Norte, Centro, Sur) en un combo y en otro combo aparecerán los municipios de la zona seleccionada.
Este comboBox tendrá los items: Norte, Centro y Sur. El otro combo queda en blanco
Lic. Alejandro César Valencia García
CÓDIGO (1 DE 2) • El código se agrega en el evento SelectedIndexChanged, es decir cuando el usuario seleccione un elemento de la lista. Para agregar el código haz doble clic en el comboBox1. string[] mun_norte= new string[]{"Arroyo Seco", "Jalpan de Serra", "Pinal de Amoles","Landa de Matamoros"}; string[] mun_centro = new string[] { "Cadereyta", "Ezequiel Montes", "Peñamiller", "Tolimán" }; string[] mun_sur = new string[] { "Amealco", "San Juan del Río", "Tequisquiapan" };
string region = comboBox1.Text; Lic. Alejandro César Valencia García
CÓDIGO (2 DE 2) switch (region) {
case "Norte": comboBox2.Items.Clear(); comboBox2.Items.AddRange(mun_norte); break; case "Centro": comboBox2.Items.Clear(); comboBox2.Items.AddRange(mun_centro); break; case "Sur": comboBox2.Items.Clear(); comboBox2.Items.AddRange(mun_sur); break; default: comboBox2.Items.Clear(); MessageBox.Show("Opción no válida"); comboBox1.Focus(); break; }
Lic. Alejandro César Valencia García
TRABAJAR CON VARIOS FORMULARIOS • Un proyecto puede estar compuesto por más de un formulario, dependiendo la complejidad del mismo. • Por default, en un proyecto nuevo se genera el archivo form1.cs, que representa a nuestro primer formulario. • Para agregar un formulario al proyecto: ▫ Menu Proyecto -> Agregar Windows Forms…
Lic. Alejandro César Valencia García
TRABAJAR CON VARIOS FORMULARIOS • En el cuadro de diálogo de agregar nuevo elemento, selecciona Windows Form, y Agregar.
Lic. Alejandro César Valencia García
TRABAJAR CON VARIOS FORMULARIOS • El nuevo formulario aparece ahora en el Explorador de Soluciones
Lic. Alejandro César Valencia García
EJEMPLO – COMO ABRIR OTRO FORMULARIO • En el formulario 1, agregamos un botón que al darle clic nos abrirá el segundo formulario:
El código del botón quedaría: Form2 frm = new Form2(); frm.ShowDialog();
Lic. Alejandro César Valencia García
EJERCICIO Hacer un programa que tenga un formulario inicial con 4 botones : -Conversión de pesos a dólares -Conversión de pies a metros -Conversión de libras a kilogramos -Conversión de millas a kilómetros Hacer los formularios correspondientes a cada área
Lic. Alejandro César Valencia García
EJERCICIO • Hacer un programa que pida usuario y contraseña y muestre un segundo formulario. Si el usuario o contraseña son incorrectos, mostrar un mensaje de error. Sólo deben permitirse 3 intentos de acceso, al cuarto acceso, cerrar el programa.
Lic. Alejandro César Valencia García
ACCESO A BASE DE DATOS • Actualmente la mayoría de los proyectos de desarrollo de software que se ponen en marcha cuentan entre sus necesidades con el acceso a bases de datos relacionales. • El 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 .NET Framework.
Lic. Alejandro César Valencia García
ADO .NET
Lic. Alejandro César Valencia García
DATA PROVIDER • Connection: Proporciona una conexión usada para comunicarse con la fuente de datos.
• 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 datos 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. Lic. Alejandro César Valencia García
EJEMPLO • Crear una base de datos en Access (versión 2003) llamada clientes y una tabla del mismo nombre con los campos: ▫ ▫ ▫ ▫ ▫ ▫ ▫
ID (autonumérico) Nombre (texto, 100) Apellido_p (texto, 100) Apellido_m (texto, 100) Domicilio (texto, 255) Telefono (texto, 50) E_mail (texto, 50)
• Introducir 5 registros. Lic. Alejandro César Valencia García
EJEMPLO • Genera un nuevo proyecto de Visual. El primer formulario tendrá botones para acceder a las secciones del sistema:
Lic. Alejandro César Valencia García
EJEMPLO • Agrega un nuevo form, y programa el botón de Consultas para abrir este formulario.
Lic. Alejandro César Valencia García
EJEMPLO • En el nuevo formulario, insertar un componente DataGridView y dos botones (Ver Registros y Salir):
Lic. Alejandro César Valencia García
EJEMPLO • Propiedades para el DataGridView: ColumnsHeadersVisible = True (para que muestre los nombres de los campos) ReadOnly = True (Para que no permita borrar, modificar o agregar registros) RowHeaderVisible = False (para que no agregue un número en cada fila) Lic. Alejandro César Valencia García
EJEMPLO • Código para el botón de Ver Registros: // se declaran los objetos conexión, adapter y dataset OleDbConnection CANAL; OleDbDataAdapter ORDEN; DataSet TABLA; // crear y enlazar conexión a la base de datos. Checar bien la ruta CANAL = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\clientes.mdb"); // crear y cargar el adapter con la instruccion sql ORDEN = new OleDbDataAdapter("select * from clientes", CANAL); Lic. Alejandro César Valencia García
EJEMPLO // se crea y se carga el dataset TABLA = new DataSet(); ORDEN.Fill(TABLA, “clientes");
// se carga y se enlaza el DataGridView dataGridView1.DataSource = TABLA; dataGridView1.DataMember = “clientes";
Importante. Se debe agregar en las directivas using (al comienzo del código): using System.Data.OleDb Lic. Alejandro César Valencia García
EJEMPLO • Debe mostrar los registros de esta forma:
• Si es necesario ajusta los tamaños del formulario y del dataGrid para que se visualicen todos los campos. Lic. Alejandro César Valencia García
EJEMPLO • Agrega un nuevo form, y programa el botón de Altas para abrir este formulario:
Lic. Alejandro César Valencia García
EJEMPLO • El diseño del nuevo formulario sería así:
Lic. Alejandro César Valencia García
EJEMPLO • Código del botón Guardar: // crear y cargar conexión y command OleDbConnection CANAL; OleDbCommand ORDEN; // se abre la conexión. Checar la ruta CANAL = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\clientes.mdb"); string q = "insert into clientes(nombre,apellido_p,apellido_m,domicilio,telefono,e_mail) values(@NOMBRE, @APELLIDO_P, @APELLIDO_M, @DOMICILIO, @TELEFONO, @E_MAIL)";
ORDEN = new OleDbCommand(q, CANAL); Lic. Alejandro César Valencia García
EJEMPLO ORDEN.Parameters.Add(new OleDbParameter("@NOMBRE", OleDbType.VarWChar, 100)); ORDEN.Parameters["@NOMBRE"].Value = textBox1.Text;
ORDEN.Parameters.Add(new OleDbParameter("@APELLIDO_P", OleDbType.VarWChar, 100)); ORDEN.Parameters["@APELLIDO_P"].Value = textBox2.Text; ORDEN.Parameters.Add(new OleDbParameter("@APELLIDO_M", OleDbType.VarWChar, 100)); ORDEN.Parameters["@APELLIDO_M"].Value = textBox3.Text; ORDEN.Parameters.Add(new OleDbParameter("@DOMICILIO", OleDbType.VarWChar, 255)); ORDEN.Parameters["@DOMICILIO"].Value = textBox4.Text; ORDEN.Parameters.Add(new OleDbParameter("@TELEFONO", OleDbType.VarWChar, 50)); ORDEN.Parameters["@TELEFONO"].Value = textBox5.Text; ORDEN.Parameters.Add(new OleDbParameter("@E_MAIL", OleDbType.VarWChar, 50)); ORDEN.Parameters["@E_MAIL"].Value = textBox6.Text;
Lic. Alejandro César Valencia García
EJEMPLO ORDEN.Connection.Open(); ORDEN.ExecuteNonQuery(); ORDEN.Connection.Close(); MessageBox.Show("Se insertó un registro correctamente"); textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = ""; textBox5.Text = ""; textBox6.Text = ""; textBox1.Focus(); Lic. Alejandro César Valencia García
TIPOS DE DATO OLEDBTYPE MÁS COMUNES • Integer • Char • Date • Double • VarWChar Lic. Alejandro César Valencia García
EJEMPLO • Agrega un nuevo form y programa el botón de Modificaciones para abrir este formulario:
Lic. Alejandro César Valencia García
EJEMPLO • El diseño del formulario quedaría así: La idea es que cuando cargue el formulario muestre el primer registro en los textBox. El usuario modifique lo necesario y dé clic en Guardar. El textBox1 (ID del Cliente) es solo lectura (propiedad readonly en true) En la parte inferior del formulario se agregan botones de navegación para ver los demás registros (primero, anterior, siguiente, último)
Lic. Alejandro César Valencia García
EJEMPLO • Entrar al código y agregar las líneas que están en naranja (identifica bien la ubicación del código): using System.Data.OleDb; namespace clientes { public partial class Form4 : Form { public Form4() { InitializeComponent(); } private int fila; private OleDbConnection CANAL; private OleDbDataAdapter ORDEN; private DataTable TABLA; Lic. Alejandro César Valencia García
EJEMPLO • Hacer doble clic en el form (no en los controles) y agregar el siguiente código (debe quedar en Form4_Load): CANAL = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\\clientes.mdb"); ORDEN = new OleDbDataAdapter("select * from clientes", CANAL); //Se asigna el comando Update al DataAdapter OleDbCommandBuilder cb = new OleDbCommandBuilder(ORDEN); ORDEN.UpdateCommand = cb.GetUpdateCommand(); TABLA = new DataTable(); ORDEN.Fill(TABLA); // Y mostrar el primer registro if (TABLA.Rows.Count > 0) { button3_Click(null, null); } else { fila = -1; button1.Enabled = false; } Lic. Alejandro César Valencia García
EJEMPLO • Código para el botón > (siguiente): // Posicionarse en la fila siguiente int uf = TABLA.Rows.Count - 1; fila = fila + 1; if (fila > uf) fila = uf; // Mostrar los datos de la fila indicada mostrarDatos(fila); • Código para el botón >| (último): // Posicionarse en la última fila fila = TABLA.Rows.Count - 1; // Mostrar los datos de la fila indicada mostrarDatos(fila); Lic. Alejandro César Valencia García
EJEMPLO • Código para el botón |< (primero): // Posicionarse en la primera fila fila = 0; // Mostrar los datos de la fila indicada mostrarDatos(fila); • Código para el botón < (anterior): // Posicionarse en la fila anterior fila = fila - 1; if (fila < 0) fila = 0; // Mostrar los datos de la fila indicada mostrarDatos(fila); Lic. Alejandro César Valencia García
EJEMPLO • Código para el botón Grabar: // Actualizar los datos en la fila actual if (fila < 0 || fila > TABLA.Rows.Count - 1) return; DataRow dr = TABLA.Rows[fila]; // Asignar los datos de los textbox a la fila asignarDatos(dr); // Guardar físicamente los datos en la base try { ORDEN.Update(TABLA); TABLA.AcceptChanges(); MessageBox.Show("El Registro ha sido modificado"); } catch (DBConcurrencyException ex) { MessageBox.Show("Error de concurrencia:\n" + ex.Message); } catch (Exception ex) { MessageBox.Show(ex.Message); } Lic. Alejandro César Valencia García
EJEMPLO • Agregar esta función después del último botón: private void mostrarDatos(int f) { int uf = TABLA.Rows.Count - 1; if (f < 0 || uf < 0) return;
DataRow dr = TABLA.Rows[f]; textBox1.Text = dr["ID"].ToString(); textBox2.Text = dr["nombre"].ToString(); textBox3.Text = dr["apellido_p"].ToString(); textBox4.Text = dr["apellido_m"].ToString(); textBox5.Text = dr["domicilio"].ToString(); textBox6.Text = dr["telefono"].ToString(); textBox7.Text = dr["e_mail"].ToString(); button1.Enabled = true;
} Lic. Alejandro César Valencia García
EJEMPLO • Agregar esta función después de la anterior: private void asignarDatos(DataRow dr) { // Usar los datos que hay en los textbox dr["nombre"] = textBox2.Text; dr["apellido_p"] = textBox3.Text; dr["apellido_m"] = textBox4.Text; dr["domicilio"] = textBox5.Text; dr["telefono"] = textBox6.Text; dr["e_mail"] = textBox7.Text; } Lic. Alejandro César Valencia García
EJEMPLO • Agrega un nuevo form y programa el botón de Bajas para abrir este formulario:
Lic. Alejandro César Valencia García
EJEMPLO • El diseño del formulario quedaría así (es exactamente igual al de Modificaciones): Todo el código que agregaste en el form de modificaciones lo tienes que agregar aquí.
La única diferencia es que el botón de Guardar debe decir ahora Eliminar, y el código de ese botón viene en la siguiente diapositiva
Lic. Alejandro César Valencia García
EJEMPLO • Código para el botón de Eliminar: // Objetos OLEDB que se ocupan OleDbCommand ORDEN2; // Instruccion sql DELETE FROM TABLA WHERE CLAVE=DATO
string q = "delete from clientes where id=@ID"; ORDEN2 = new OleDbCommand(q, CANAL); ORDEN2.Parameters.Add(new OleDbParameter("@ID", OleDbType.Integer)); ORDEN2.Parameters["@ID"].Value = textBox1.Text; ORDEN2.Connection.Open(); ORDEN2.ExecuteNonQuery(); ORDEN2.Connection.Close();
Continúa en la siguiente diapositiva… Lic. Alejandro César Valencia García
EJEMPLO //reseteando la Tabla TABLA.Rows.Clear(); ORDEN.Fill(TABLA); MessageBox.Show("Registro Eliminado");
// Y mostrar el primer registro if (TABLA.Rows.Count > 0) { button3_Click(null, null); } else { fila = -1; button1.Enabled = false; } Lic. Alejandro César Valencia García