You are on page 1of 23

Archivos de Datos con C#

Ing. Javier Alberto Manrique Quionez Pgina 1

Archivos de Datos con C#

El almacenamiento en variables, arreglos o colecciones es temporal; los datos se pierden cuando una variable local queda fuera del alcance, o cuando la aplicacin termina. Las computadoras utilizan archivos de datos para la retencin a largo plazo de grandes cantidades de datos, incluso hasta despus de que terminan las aplicaciones que crean esos datos. Se denominan datos persistentes a aquellos que duran ms all de la duracin de la ejecucin de la aplicacin. Las computadoras almacenan archivos en dispositivos de almacenamiento secundario como disco duros, USB, discos pticos y cintas magnticas.

ARCHIVOS DE DATOS

El procesamiento de archivos es una de las herramientas ms importantes que debe tener un lenguaje de programacin para soportar las aplicaciones comerciales que generalmente procesan grandes cantidades de datos persistentes. C# posee pose poderosas caractersticas de procesamiento de archivos de datos, las cuales permiten a una aplicacin leer y escribir datos en memoria interna y/o memoria externa o en archivos a travs de la red. Entre las operaciones que se pueden realizar con archivos de datos tenemos: Agregar registros de datos (Alta) Eliminar registros de datos (Baja) Acceder a registros, siguiendo algn mtodo (secuencial, directo, secuencial indexado, etc) Consultar la informacin almacenada en los registros de datos (Consulta) Modificar la informacin de los registros de datos (Modificacin)

ORGANIZACIN DATOS
Campo

DE

LOS

ARCHIVOS

DE

Los archivos de datos se organizan de la siguiente forma: Es el agrupamiento de caracteres o nmeros para formar una palabra o una cifra completa, como el cdigo o nombre de un alumno. Registro Es un grupo de campos relacionados considerados como una unidad. Archivo/tabla Es un grupo de registros relacionados del mismo tipo. Base de datos Es un grupo de archivos/tabla relacionados que almacenan la informacin de una organizacin. ORGANIZACIN SECUENCIAL Mtodo para almacenar registros de datos, en el cual los registros se deben recuperar en el mismo orden en que se almacenaron. ORGANIZACIN DIRECTA O ALEATORIA.

Ing. Javier Alberto Manrique Quionez Pgina 2

Archivos de Datos con C#

Mtodo para almacenar registros de datos en un archivo de modo que se pueda acceder a ellos en cualquier secuencia sin importar su orden fsico real en los medios de almacenamiento. ORGANIZACIN SECUENCIAL INDEXADA El mtodo utiliza un ndice de campo clave para buscar y localizar fsicamente un registro, como pueden localizarse los temas clave en un libro. Utiliza un arreglo de ndice en la RAM donde se almacena en forma ordenada el campo clave y la direccin fsica de los registros. Despus de operaciones de mantenimiento este arreglo de ndices puede ser grabado en forma separada en el medio magntico para luego ser utilizado en la prxima sesin previa carga de los ndices en la memoria RAM. Un ndice es una tabla o lista que contiene las claves de registros con las posiciones fsicas en archivo de acceso indexado. JERARQUA DE DATOS Archivo de Notas Base de datos Archivo de expedientes personales Archivo de CxP

Archivo/tabla

alumno_id promedio final 1 2 3

apellidoNombre

evaluacin

evaluacin parcial 2

promedio de trabajo 11 12 13 11 12

parcial 1 Arias, Alex Barreto, Byron Cespedes, Cesar 13 apellidoNombre 11 12 13 evaluacin 11

11 12 13 evaluacin

Registro

alumno_id promedio 1 11

promedio final

parcial 1 Arias, Alex apellidoNombre Arias, Alex

parcial 2 de trabajo 11 11

Campo

Byte

10000001

Letra A en ASCII

Bit

ARCHIVOS DE ACCESO ALEATORIO EN C#


Todos los lenguajes de programacin tienen alguna forma de interactuar con los sistemas de archivos de datos; C# no es una excepcin. Si se est desarrollando una aplicacin C# para uso interno, probablemente ser necesario el acceso directo a archivos. Antes de realizar acciones sobre un archivo, necesitamos un poco de informacin sobre ese archivo. A menudo, no se desea leer un archivo de principio a

Ing. Javier Alberto Manrique Quionez Pgina 3

Archivos de Datos con C#

fin; sino acceder al archivo como una base de datos, donde se salta de un registro a otro; cada uno en diferentes partes del archivo. C# proporciona una clase RandomAccessFile para este tipo de entrada/salida. FLUJOS La comunicacin entre una aplicacin y el origen o el destino de cierta informacin se realiza mediante un flujo de informacin (stream), que no es ms que un objeto que hace de intermediario entre la aplicacin y el origen o el destino de datos de la informacin. De esta forma la aplicacin leer o escribir en el flujo sin importarle desde donde viene la informacin o donde se va. El espacio de nombres System.IO de la biblioteca .Net contiene una coleccin de clases que soportan estos algoritmos para leer y escribir datos. La clase FileStream subclase de Stream permite escribir y leer datos de un archivo byte a byte; analgicamente, las clases StreamWriter y StreamReader subclases de TextWriter y textReader permiten escribir y leer caracteres. Las clases BinaryWriter y BinaryReader permiten escribir y leer datos de cualquier tipo primitivos en binario y cadena de caracteres. FLUJO DE BYTES Los datos pueden ser escritos o ledos de un archivo byte a byte utilizando un flujo de la clase FileStream FileStream Un flujo de la clase FileStream permite leer y escribir bytes en un archivo. Esta clase adems de los mtodos que hereda de la clase Stream, proporciona el constructor siguiente: FileStream(string nombre, FileMode, FileAccess acceso) El constructor abre el flujo de entrada y salida (para leer y escribir) vinculando con el archivo especificado por el nombre y especificando el tipo de acceso (leer, Escribir o leer y escribir). El parmetro nombre es una cadena de caracteres que especifica la ruta donde se guarda o se guardar el archivo. El parmetro modo, del tipo enumerado FileMode, puede tomar los siguientes valores:
CreateNew Create Open OpenOrCreate Truncate Append Read ReadWrite Write Crear un nuevo archivo. Si el archivo existe se lanzar una excepcin del tipo IOException Crea un nuevo archivo. Si el archivo existe ser sobreescrito Abre un archivo existente Abre un archivo si existe; si no, se crea un nuevo archivo Abre un archivo existente. Una vez abierto, el archivo ser truncado a cero bytes de longitud Abre un archivo para aadir datos al final del mismo si existe o crea uno nuevo sino existe Permite abrir un archivo para operaciones de lectura Permite abrir un archivo para operaciones de lectura / escritura Permite abrir un archivo para operaciones de escritura

FLUJOS DE DATOS PRIMITIVOS Muchas aplicaciones requieren escribir en un archivo datos de tipos primitivos (bool, double, float, long, int, short, etc) no como cadena de caracteres, sino en formato binario para posteriormente recuperarlos como tal. Para estos casos el espacio de nombres System.IO proporciona las clases BinaryReader y BinaryWriter, las cuales permiten leer y escribir respectivamente datos de cualquier tipo primitivo en formato

Ing. Javier Alberto Manrique Quionez Pgina 4

Archivos de Datos con C#

binario y cadena de caracteres en formato UTF-8. Un flujo BinaryReader slo puede leer datos almacenados en un archivo a travs de un flujo BinaryWriter. BinaryWriter Un flujo de la clase BinaryWriter permite a una aplicacin escribir datos de cualquier tipo primitivos. Se puede crear un flujo de esta clase utilizando el siguiente constructor: BinaryWriter(Stream flujo) Este constructor abre un flujo de salida (para escribir) hacia el archivo vinculado con otro flujo existente de la clase Stream o de sus derivadas. Ejemplo:
public Boolean escribirRegistro ( Alumno oAlumno, int posicion ) { String archivo=Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Write); BinaryWriter bw = new BinaryWriter(fs); bw.BaseStream.Seek(posicion*longitudDeRegistro,SeekOrigin.Begin); bw.Write(oAlumno.getAlumno_id()); bw.Write(oAlumno.getApellidoNombre()); bw.Write(oAlumno.getEvaluacionParcial1()); bw.Write(oAlumno.getEvaluacionParcial2()); bw.Write(oAlumno.getPromedioDeTrabajo()); bw.Write(oAlumno.getPromedioFinal()); bw.Close(); fs.Close(); return true; } Los mtodos ms utilizados de esta clase se resumen en la tabla siguiente:

Write Write Write Write Write Write Write Write Write Write

(byte) (byte[]) (char) (char[]) (short) (int) (long) (Decimal) (float) (double)

Write (string) BaseStream() Close Flush Seek

Escribe un valor de tipo byte Escribe una cadena como una secuencia de bytes Escribe un valor de tipo char Escribe una cadena como una secuencia de caracteres Escribe un valor de tipo short Escribe un valor de tipo int Escribe un valor de tipo long Escribe un valor de tipo Decimal Escribe un valor de tipo float Escribe un valor de tipo double Escribe una cadena de caracteres en formato UTF-8; el primer byte o los dos primeros bytes especifican el nmero de bytes de datos escritos a continuacin Obtiene el flujo subyacente (fs en la figura anterior) Cierra el flujo y libera los recursos adquiridos Limpia el buffer asociado con el flujo Establece movimiento del puntero de Lectura/Escritura en el flujo

BinaryReader Un flujo de la clase BinaryReader, permite a una aplicacin leer datos de cualquier tipo primitivos escritos por un flujo de la clase BinaryWriter. Se puede crear un flujo de esta clase utilizando el siguiente constructor: BinaryReader(Stream flujo) Este constructor abre un flujo de entrada (para leer) desde el archivo vinculando con otro flujo existente de la clase Stream o de sus derivadas. Ejemplo:

Ing. Javier Alberto Manrique Quionez Pgina 5

Archivos de Datos con C#


BinaryReader br = new BinaryReader(fs);
FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Read);

Programa <-- br <-- fs <-- Archivo public Alumno leerRegistro(Alumno oAlumno, int posicion) { String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs); br.BaseStream.Seek(posicion*longitudDeRegistro, SeekOrigin.Begin); oAlumno = new Alumno(br.ReadInt32(),br.ReadString(),br.ReadDouble(),br.ReadDouble(),br.ReadDouble(), br.ReadDouble() ); br.Close(); fs.Close(); return oAlumno; } Los mtodos ms utilizados de esta clase se resumen en la tabla siguiente:

ReadByte ReadBytes ReadChar ReadChars ReadInt16 ReadInt32 ReadInt64 ReadDecimal ReadSingle ReadDouble ReadString BaseStream Close PeekChar

Devuelve un valor de tipo byte Devuelve un valor de tipo byte[ ] Devuelve un valor de tipo char Devuelve un valor de tipo char[ ] Devuelve en valor de tipo short Devuelve un valor de tipo int Devuelve un valor de tipo long Devuelve un valor de tipo decimal Devuelve una valor de tipo float Devuelve un valor de tipo double Devuelve una cadena de caracteres en formato UTF-8; el primer o dos primeros bytes especifican el nmero de bytes de datos que sern ledos a continuacin Obtiene el flujo subyacente Cierra el flujo y libera los recursos adquiridos Obtiene el siguiente carcter sin extraerlo

PROPIEDADES Y MTODO PARA ACCESO ALEATORIO La clase FileStream, que se deriva directamente de Stream, implementa las propiedades Position y Length y el mtodo seek que combinados entre s facilitan el acceso aleatorio a un archivo. Position : Devuelve la posicin actual en bytes del puntero de lectura/escritura en un archivo Length : Devuelve la longitud del archivo en bytes Seek : Mueve el puntero de lectura/escritura a una nueva localizacin desplazada desp bytes de la posicin pos del archivo La posicin pos es un valor de tipo SeekOrigin que define las siguientes constantes: Begin : Hace referencia a la primera posicin en el archivo Current : Hace referencia a la posicin actual del puntero de lectura/escritura End : Hace referencia a la ltima posicin en el archivo. Ejemplo:
public int buscarRegistro(int busqueda) { Alumno oAlumno;// Delaracin del objeto oAlumno String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo, FileMode.Open, FileAccess.Read); BinaryReader br = new BinaryReader(fs);

Ing. Javier Alberto Manrique Quionez Pgina 6

Archivos de Datos con C#


int encontrado = 0; int posicion = 0; int tamaoDelArchivo = numeroDeRegistro(); while ( (posicion < tamaoDelArchivo) && (encontrado == 0) ) { br.BaseStream.Seek(posicion*longitudDeRegistro,SeekOrigin.Begin); oAlumno=new Alumno(br.ReadInt32(),br.ReadString(),br.ReadDouble(),br.ReadDouble(),br.ReadDouble(),br.ReadDouble() ); if ( busqueda == oAlumno.getAlumno_id() ) { encontrado = 1; } else { posicion++; } } fs.Close(); br.Close(); if ( encontrado == 1 ) { return posicion; } else { return -99; } }

A continuacin se presenta un ejemplo de una aplicacin que administra un archivo de acceso aleatorio:

Ing. Javier Alberto Manrique Quionez Pgina 7

Archivos de Datos con C#

DIAGRAMA DE CLASES

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS NO ACTION

Ing. Javier Alberto Manrique Quionez Pgina 8

Archivos de Datos con C#

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS ACTION INSERTAR - BUSCAR

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS ACTION INSERTAR - GUARDAR

Ing. Javier Alberto Manrique Quionez Pgina 9

Archivos de Datos con C#

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS MODIFICAR - GUARDAR

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS MODIFICAR - CONFIRMAR

Ing. Javier Alberto Manrique Quionez Pgina 10

Archivos de Datos con C#

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS SELECCIN DE FILA

FORMULARIO SISTEMA DE MANTENIMIENTO ABCM DE ALUMNOS ELIMINAR CONFIRMAR

Ing. Javier Alberto Manrique Quionez Pgina 11

Archivos de Datos con C#

Ing. Javier Alberto Manrique Quionez Pgina 12

Archivos de Datos con C#

APLICACIN EN EL EXPLORADOR DE SOLUCIONES

CDIGO - Program
using using using using System; System .Collections .Generic; System .Linq; System .Windows .Forms;

namespace ArchivoDeDatosConGUIyDAO { static class Program { /// <summary> /// Punto de entrada principal para la aplicacin. /// </summary> [STAThread] static void Main ( ) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new FormularioABCM()); } }

Ing. Javier Alberto Manrique Quionez Pgina 13

Archivos de Datos con C#


}

CDIGO Clase Alumno


using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ArchivoDeDatosConGUIyDAO { public class Alumno { private int alumno_id; private String apellidoNombre; private double evaluacionParcial1; private double evaluacionParcial2; private double promedioDeTrabajo; private double promedioFinal; public Alumno ( ) { this.alumno_id = 0; this.apellidoNombre = null; this.evaluacionParcial1 = 0; this.evaluacionParcial2 = 0; this.promedioDeTrabajo = 0; } public Alumno ( int alumno_id, String apellidoNombre, double evaluacionParcial1, double evaluacionParcial2, double promedioDeTrabajo, double promedioFinal ) { this.alumno_id = alumno_id; this.apellidoNombre = apellidoNombre; this.evaluacionParcial1 = evaluacionParcial1; this.evaluacionParcial2 = evaluacionParcial2; this.promedioDeTrabajo = promedioDeTrabajo; this.promedioFinal = promedioFinal; } public int getAlumno_id ( ) { return this.alumno_id; } public void setAlumno_id ( int alumno_id ) { this.alumno_id = alumno_id; } public String getApellidoNombre ( ) { return this.apellidoNombre; } public void setApellidoNombre ( String apellidoNombre ) { this.apellidoNombre = apellidoNombre; } public double getEvaluacionParcial1 ( ) { return this.evaluacionParcial1; } public void setEvaluacionParcial1 ( double evaluacionParcial1 ) { this.evaluacionParcial1 = evaluacionParcial1; } public double getEvaluacionParcial2 ( ) { return this.evaluacionParcial2; } public void setEvaluacionParcial2 ( double evaluacionParcial2 ) { this.evaluacionParcial2 = evaluacionParcial2; } public double getPromedioDeTrabajo ( ) { return promedioDeTrabajo; } public void setPromedioDeTrabajo ( double promedioDeTrabajo ) { this.promedioDeTrabajo = promedioDeTrabajo; } public double getPromedioFinal ( )

Ing. Javier Alberto Manrique Quionez Pgina 14

Archivos de Datos con C#


{ return this.promedioFinal; } public void setPromedioFinal ( double promedioFinal ) { this.promedioFinal = promedioFinal; } public void setPromedioFinal ( ) { this.promedioFinal=(this.evaluacionParcial1+this.evaluacionParcial2+this.promedioDeTrabajo)/3; } public String toString ( ) { return apellidoNombre; } }

CDIGO Clase AlumnoDAO


using System; using System .Collections .Generic; using System .Linq; using System .Text; using System.IO; using System.Collections; namespace ABCMyDAO { public class AlumnoDAO { public Boolean insertarRegistro(Alumno oAlumno) { int posicion = numeroDeRegistro(); if(escribirRegistro(oAlumno, posicion)) { return true; } else { return false; } } public Alumno consultarRegistro(int busqueda) { Alumno oAlumno = new Alumno(); int posicion = buscarRegistro(busqueda); if(posicion != -99) { oAlumno = leerRegistro(oAlumno, posicion); return oAlumno; } else { return null; } } public Boolean modificarRegistro ( int busqueda, Alumno oAlumno ) { int posicion = buscarRegistro(busqueda); if ( posicion != -99 ) { if (escribirRegistro(oAlumno, posicion) ) { return true; } else { return false; } } else { return false; } }

Ing. Javier Alberto Manrique Quionez Pgina 15

Archivos de Datos con C#

public Boolean eliminarRegistro(int busqueda) { Alumno oAlumno = new Alumno(); int posicion = buscarRegistro(busqueda); if(posicion != -99) { oAlumno = leerRegistro(oAlumno, posicion); oAlumno.setAlumno_id(0); if(escribirRegistro(oAlumno, posicion)) { return true; } else { return false; } } else { return false; } } public Boolean modificarRegistro ( int busqueda, Alumno oAlumno ) { Alumno oAlumno; String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Read); BinaryReader br = new BinaryReader(fs); int encontrado = 0; int posicion = 0; int tamaoDelArchivo = numeroDeRegistro(); while ( (posicion < tamaoDelArchivo) && (encontrado == 0) ) { br.BaseStream.Seek(posicion*longitudDeRegistro,SeekOrigin.Begin); oAlumno=new Alumno(br.ReadInt32(),br.ReadString(),br.ReadDouble(),br.ReadDouble(),br.ReadDouble(),br.ReadDouble() ); if ( busqueda == oAlumno.getAlumno_id() ) { encontrado = 1; } else { posicion++; } } fs.Close(); br.Close(); if ( encontrado == 1 ) { return posicion; } else { return -99; } } public Alumno leerRegistro(Alumno oAlumno, int posicion) { String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Read); BinaryReader br = new BinaryReader(fs); br.BaseStream.Seek(posicion*longitudDeRegistro, SeekOrigin.Begin); oAlumno=new Alumno(br.ReadInt32(), br.ReadString(), br.ReadDouble(), br.ReadDouble(), br.ReadDouble(), br.ReadDouble()); fs.Close(); br.Close(); return oAlumno; } public Boolean escribirRegistro ( Alumno oAlumno, int posicion ) { String archivo=Properties.Settings.Default.nombreDeArchivo;

Ing. Javier Alberto Manrique Quionez Pgina 16

Archivos de Datos con C#


int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; FileStream fs=new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.ReadWrite); BinaryWriter bw = new BinaryWriter(fs); bw .BaseStream.Seek(posicion*longitudDeRegistro,SeekOrigin.Begin); bw.Write(oAlumno.getAlumno_id()); bw.Write(oAlumno.getApellidoNombre()); bw.Write(oAlumno.getEvaluacionParcial1()); bw.Write(oAlumno.getEvaluacionParcial2()); bw.Write(oAlumno.getPromedioDeTrabajo()); bw.Write(oAlumno.getPromedioFinal()); fs.Close(); bw.Close(); return true; }

public List<Alumno> obtenerDatosEnList() { AlumnoDAO oAlumnoDAO = new AlumnoDAO(); String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties.Settings.Default.longitudDeRegistro; List<Alumno> oListAlumno = new List<Alumno>(); FileStream fs = new FileStream(archivo, FileMode.OpenOrCreate, FileAccess.Read); BinaryReader br = new BinaryReader(fs); Alumno oAlumno; for (int posicion = 0; posicion < oAlumnoDAO.numeroDeRegistro(); posicion = posicion + 1) { br.BaseStream .Seek(posicion * longitudDeRegistro, SeekOrigin.Begin); oAlumno=new Alumno(br.ReadInt32(),br.ReadString(), br.ReadDouble(),br.ReadDouble(),br.ReadDouble(), br.ReadDouble()); oListAlumno.Add(oAlumno); } br.Close(); fs.Close(); return oListAlumno; }
public int numeroDeRegistro() { String archivo = Properties.Settings.Default.nombreDeArchivo; int longitudDeRegistro = Properties .Settings.Default.longitudDeRegistro; FileStream fs = new FileStream(archivo,FileMode.OpenOrCreate, FileAccess.Read); int n = (int) (Math.Ceiling((double) fs.Length / (double) longitudDeRegistro)); fs .Close(); return n; } } }

Ing. Javier Alberto Manrique Quionez Pgina 17

Archivos de Datos con C#

CDIGO Clase FormularioABCM


using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Windows.Forms; using System.Windows.Forms.Design; namespace ABCMyDAO { public partial class FormularioABCM : Form { private int action = ABCMAccion.NO_ACTION; public FormularioABCM() { InitializeComponent(); controladorDeEventosBotonesABCM(); formatearDataGridView(); actualizarDataGridViewAlumno(); } private void formatearDataGridView() { //Para especificar la fuente utilizada por las celdas de DataGridView dataGridViewAlumno.DefaultCellStyle.Font = new Font("Tahoma", 07);
// Para cambiar mediante programacin el estilo de borde de todo el control DataGridView

dataGridViewAlumno.BorderStyle = BorderStyle.Fixed3D;
// Para cambiar mediante programacin el color de la lnea de la cuadrcula

dataGridViewAlumno.GridColor = Color.Blue;
// Para indicar la forma de seleccin de las filas

dataGridViewAlumno.SelectionMode = DataGridViewSelectionMode.FullRowSelect;
// Para especificar los colores de primer plano y de fondo de celdas // seleccionadas de DataGridView

dataGridViewAlumno.DefaultCellStyle.SelectionForeColor = Color.Black; dataGridViewAlumno.DefaultCellStyle.SelectionBackColor = Color.Aqua;


// Para establecer estilos de filas alternas mediante programacin

dataGridViewAlumno.RowsDefaultCellStyle.BackColor = Color.Pink; dataGridViewAlumno.AlternatingRowsDefaultCellStyle.BackColor = Color.Purple; // Para especificar la alineacin del texto de celdas de DataGridView dataGridViewAlumno.Columns["ColumnAlumno_id"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight; dataGridViewAlumno.Columns["ColumnApellidoNombre"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft; dataGridViewAlumno.Columns["ColumnEvaluacionparcial1"].DefaultCellStyle.Alignme nt = DataGridViewContentAlignment.MiddleRight; dataGridViewAlumno.Columns["ColumnEvaluacionparcial2"].DefaultCellStyle.Alignme nt = DataGridViewContentAlignment.MiddleRight; dataGridViewAlumno.Columns["ColumnPromedioDetrabajo"].DefaultCellStyle.Alignme nt = DataGridViewContentAlignment.MiddleRight; dataGridViewAlumno.Columns["ColumnPromedioFinal"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

Ing. Javier Alberto Manrique Quionez Pgina 18

Archivos de Datos con C#


// Para especificar los colores de primer plano y de fondo de las celdas de DataGridView

dataGridViewAlumno.DefaultCellStyle.ForeColor = Color.Black; dataGridViewAlumno.DefaultCellStyle.BackColor = Color.Beige; } private Alumno getObjetoAlumno() { Alumno oAlumno = new Alumno(); oAlumno.setAlumno_id(int.Parse(textBoxAlumno_id.Text)); oAlumno.setApellidoNombre(textBoxApellidoNombre.Text);

oAlumno.setEvaluacionParcial1(double.Parse(textBoxEvaluacionParcial1.Text)); oAlumno.setEvaluacionParcial2(double.Parse(textBoxEvaluacionParcial2.Text)); oAlumno.setPromedioDeTrabajo(double.Parse(textBoxPromedioDeTrabajo.Text)); return oAlumno; } private void setObjetoAlumno(Alumno oAlumno) { textBoxAlumno_id.Text = oAlumno.getAlumno_id() + ""; textBoxApellidoNombre.Text = oAlumno.getApellidoNombre() + ""; textBoxEvaluacionParcial1.Text = oAlumno.getEvaluacionParcial1() + ""; textBoxEvaluacionParcial2.Text = oAlumno.getEvaluacionParcial2() + ""; textBoxPromedioDeTrabajo.Text = oAlumno.getPromedioDeTrabajo() + ""; }
private void limpiarDataGridViewAlumno() { dataGridViewAlumno.Rows.Clear(); } private void actualizarDataGridViewAlumno() { limpiarDataGridViewAlumno(); AlumnoDAO oAlumnDAO = new AlumnoDAO(); List<Alumno> oListAlumno = oAlumnDAO.obtenerDatosEnList(); for (int posicion = 0; posicion < oListAlumno.Count; posicion=posicion+1) { if(oListAlumno[posicion].getAlumno_id()!=0) { dataGridViewAlumno.Rows.Add(oListAlumno[posicion].getAlumno_id(), oListAlumno[posicion], oListAlumno[posicion].getEvaluacionParcial1(), oListAlumno[posicion].getEvaluacionParcial2(), oListAlumno[posicion].getPromedioDeTrabajo(), oListAlumno[posicion].getPromedioFinal()); } } } private void dataGridViewAlumno_MouseClick(object sender, MouseEventArgs e) { if ((e.Clicks == 1) && (dataGridViewAlumno.RowCount>=1)) { int filaSeleccionada = dataGridViewAlumno.CurrentRow.Index; if (filaSeleccionada != -1) { Alumno oAlumnoSeleccionado = (Alumno) dataGridViewAlumno.Rows[filaSeleccionada].Cells[1].Value; setObjetoAlumno(oAlumnoSeleccionado); } } } private void habilitarBotonesABCM(
Boolean cBuscar, Boolean cNuevo, Boolean cGuardar, Boolean cEditar, Boolean cEliminar, Boolean cCancelar, Boolean cSalir)

{ buttonBuscar.Enabled = cBuscar; buttonNuevo.Enabled = cNuevo; buttonGuardar.Enabled = cGuardar; buttonModificar.Enabled = cEditar; buttonEliminar.Enabled = cEliminar; buttonCancelar.Enabled = cCancelar; buttonSalir.Enabled = cSalir; } public void limpiarCajasDeTexto()

Ing. Javier Alberto Manrique Quionez Pgina 19

Archivos de Datos con C#


{ textBoxAlumno_id.Text = ""; textBoxApellidoNombre.Text = ""; textBoxEvaluacionParcial1.Text = ""; textBoxEvaluacionParcial2.Text = ""; textBoxPromedioDeTrabajo.Text = ""; } public void habilitarCajasDeTexto(Boolean editable) { textBoxApellidoNombre.Enabled = editable; textBoxEvaluacionParcial1.Enabled = editable; textBoxEvaluacionParcial2.Enabled = editable; textBoxPromedioDeTrabajo.Enabled = editable; } private void buttonNuevo_Click(object sender, EventArgs e) { dataGridViewAlumno.ClearSelection(); habilitarBotonesABCM(true, false, false, false, false, true, false); action = ABCMAccion.ACTION_INSERTAR; limpiarCajasDeTexto(); textBoxAlumno_id.Enabled = true; textBoxAlumno_id.Focus(); } private void buttonBuscar_Click(object sender, EventArgs e) { if ((textBoxAlumno_id.Text.Length) > 0) { Alumno oAlumno = new Alumno(); AlumnoDAO oAlumnoDAO = new AlumnoDAO(); int busqueda = 0; busqueda = int.Parse(textBoxAlumno_id.Text); oAlumno = oAlumnoDAO.consultarRegistro(busqueda); if (oAlumno == null) { textBoxAlumno_id.Enabled = false; habilitarCajasDeTexto(true); habilitarBotonesABCM(false, false, true, false, false, true, false); } else { MessageBox.Show("El registro ya existe ... !!!"); action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); } } else { MessageBox.Show("Ingrese el cdigo del un alumno... !!!"); textBoxAlumno_id.Focus(); } } private void buttonGuardar_Click(object sender, EventArgs e) { if (action == ABCMAccion.ACTION_INSERTAR) { if (MessageBox.Show("Desea guardarlo...?", "Confirme el guardado", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { AlumnoDAO oAlumnoDAO = new AlumnoDAO(); if (oAlumnoDAO.insertarRegistro(getObjetoAlumno())) { action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); actualizarDataGridViewAlumno(); buttonNuevo.Focus(); } else { MessageBox.Show("No se pude grabar el registro... !!!"); } } else { limpiarCajasDeTexto(); action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM();

Ing. Javier Alberto Manrique Quionez Pgina 20

Archivos de Datos con C#


} } else { if (action == ABCMAccion.ACTION_MODIFICAR) { if (MessageBox.Show("Est seguro de guardar las modificaciones?", "Confirme el guardado", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { AlumnoDAO oAlumnoDAO = new AlumnoDAO(); Alumno oAlumno = new Alumno(); if (oAlumnoDAO.modificarRegistro(int.Parse(textBoxAlumno_id.Text), getObjetoAlumno()) ) { MessageBox.Show("Operacin exitosa ... !!!"); action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); actualizarDataGridViewAlumno(); } else { MessageBox.Show("No se pudo guardar el registro ...!!!"); } } } } } private void buttonModificar_Click(object sender, EventArgs e) { if (dataGridViewAlumno.RowCount >= 1) { int filaSeleccionada = dataGridViewAlumno.CurrentRow.Index; if (filaSeleccionada != -1 && (textBoxAlumno_id.Text.Length) > 0) { textBoxApellidoNombre.Focus(); action = ABCMAccion.ACTION_MODIFICAR; controladorDeEventosBotonesABCM(); } else { MessageBox.Show("No se ha seleccionado un registro ...!!!"); } } else { MessageBox.Show("No existen registros ...!!!"); } } private void buttonCancelar_Click(object sender, EventArgs e) { action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); buttonNuevo.Focus(); } private void buttonSalir_Click(object sender, EventArgs e) { DialogResult dialogo = MessageBox.Show("Desea cerrar el formulario?", "Cuidado", MessageBoxButtons.YesNo); if (dialogo == DialogResult.Yes) { Dispose(); } } private void controladorDeEventosBotonesABCM() { if (action == ABCMAccion.NO_ACTION) { textBoxAlumno_id.Enabled = false; habilitarCajasDeTexto(false); habilitarBotonesABCM(true, true, false, true, true, false, true); buttonNuevo.Focus(); limpiarCajasDeTexto(); dataGridViewAlumno.ClearSelection(); } else { if (action == ABCMAccion.ACTION_INSERTAR) { limpiarCajasDeTexto(); textBoxAlumno_id.Enabled = true; habilitarBotonesABCM(true, false, true, false, true, true, false);

Ing. Javier Alberto Manrique Quionez Pgina 21

Archivos de Datos con C#


AlumnoDAO oAlumnoDAO = new AlumnoDAO(); Alumno oAlumno = new Alumno(); int busqueda = 0; busqueda = int.Parse(textBoxAlumno_id.Text); oAlumno = oAlumnoDAO.consultarRegistro(busqueda); if (oAlumno == null) { buttonBuscar.Enabled = false; textBoxAlumno_id.Enabled = false; habilitarCajasDeTexto(true); habilitarBotonesABCM(true, false, true, false, true, false, false); } else { buttonBuscar.Enabled = true; MessageBox.Show("El alumno existe ...!!!"); } } else { if (action == ABCMAccion.ACTION_MODIFICAR) { habilitarCajasDeTexto(true); habilitarBotonesABCM(false, false, true, false, false, true, false); textBoxAlumno_id.Enabled = false; } } } } private void buttonEliminar_Click(object sender, EventArgs e) { if (dataGridViewAlumno.RowCount>=1) { int filaSeleccionada = dataGridViewAlumno.CurrentRow.Index; if (filaSeleccionada != -1 && (textBoxAlumno_id.Text.Length) > 0) {if (MessageBox.Show("Est seguro de eliminar los datos?", "Confirme la eliminacin", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes) { AlumnoDAO oAlumnoDAO = new AlumnoDAO(); Alumno oAlumno = new Alumno(); int busqueda = int.Parse(textBoxAlumno_id.Text); oAlumno = oAlumnoDAO.consultarRegistro(busqueda); if (oAlumno != null) { if (oAlumnoDAO.eliminarRegistro(busqueda)) { MessageBox.Show("Se elimin el registro ...!!!");
action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); actualizarDataGridViewAlumno();

} else } else

{ MessageBox.Show("No }

se

pudo

eliminar

el

registro

...!!!" );

} else { MessageBox.Show("No se pudo eliminar el registro ...!!!"); action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM();

{ MessageBox.Show("No se pudo eliminar el registro ...!!!"); action = ABCMAccion.NO_ACTION; controladorDeEventosBotonesABCM(); }

} } else { MessageBox.Show("Se tiene que seleccionar un registro ...!!!"); } } else { MessageBox.Show("No existen registros ...!!!"); } } private void FormularioABCMyDAOyBD_FormClosing(object sender, FormClosingEventArgs e)

Ing. Javier Alberto Manrique Quionez Pgina 22

Archivos de Datos con C#


{ DialogResult dialogo = MessageBox.Show("Desea cerrar el formulario?", "Cuidado", MessageBoxButtons.YesNo); if (dialogo == DialogResult.No) { e.Cancel = true; } else { if (dialogo == DialogResult.No) { e.Cancel = false; } } } }

Ing. Javier Alberto Manrique Quionez Pgina 23

You might also like