sábado, 1 de marzo de 2008

LinQ to Sql - Interface label


LinQ to Sql (Arquitectura de capas):



Bueno si quisieramos terminar este artículo con broche de oro, lo suyo sería que la interfaz la hiciera con WPF, pero como este tema hay que verlo un poco mejor vamos a hacer la UI con una aplicación Windows Forms.
Para ello agregaremos a la solución que construímos un nuevo proyecto del tipo de Windows Forms Application.
El siguiente paso será agregar las referencias a los proyectos de CapaDato y CapaNegocio, debemos entender que el proyecto de capa de dato desde esta solución windows, solo lo usaremos para utilizar la definición de estructuras de clases definidas, en ningún caso haremos una llamada a la clase dalUsuario, ya que estas llamadas se hacen desde la Capa de negocio, así es como se trabaja en capas.


La interfaz que debemos definir debe tener los siguientes controles, la distribución se las dejo a ustedes, yo los he puesto así:



Con los siguientes nombres:

  • dgvUsuario DataGridView
  • lblUsuario Label
  • lblClave Label
  • lblEstado Label
  • lblCodigo Label
  • txtCodigo TextBox
  • txtUsuario TextBox
  • txtClave TextBox
  • txtEstado TextBox
  • btnModificar Button
  • btnEliminar Button
  • btnInsertar Button

Ahora a picar código amigos!!!

Antes que todo, en el espacio de nombre de la clase de formulario, agregaremos la siguiente definición de variable de clase de la capa de negocio


CapaNegocio.brlUsuario brlUsuario = new CapaNegocio.brlUsuario();

1 - En el método que atiende el evento load de la página agregaremos las siguientes líneas de código:


private void frmUsuario_Load(object sender, EventArgs e){
try {
this.dgvUsuario.DataSource = this.brlUsuario.funUsuarioObtener();
}
catch (Exception ex){
MessageBox.Show(ex.Message);
}
}

Lo que hacemos es desplegar la información de los usuarios en el datagridview, en este caso retornamos la lista de estructura de clases y esta automáticamente se despliega.

2 - Ahora definiremos la acción de selecciona de un registro del data grid view para ello, en el método que atiende el evento CellContentClick agregaremos las siguientes líneas de código, en el cual, el método selecciona y desplega la información de un usuario en la sección de modificación eliminación de datos.


private void dgvUsuario_CellContentClick(object sender, DataGridViewCellEventArgs e){
try{
int idx = this.dgvUsuario.CurrentRow.Index;
string usuario = this.dgvUsuario[1,idx].Value.ToString();
string clave = this.dgvUsuario[2,idx].Value.ToString();


CapaDato.lnqUsuario usu = this.brlUsuario.funUsuarioObtener(usuario, clave);

this.txtCodigo.Text = usu.usuCodigo.ToString().Trim();
this.txtUsuario.Text = usu.usuLogin.ToString().Trim();
this.txtClave.Text = usu.usuClave.ToString().Trim();
this.txtEstado.Text = usu.usuEstado.ToString().Trim();

MessageBox.Show(usu.lnqEmpleado.empNombre.ToString() + " " +
usu.lnqEmpleado.empApellidoPrimero.ToString());
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}

En este caso se observa que utilizamos una definición de estructura para capturar la información que se retorna desde la Capa de negocios, como dijimos esta estructura está definida en la capa de datos, pero el acceso a los datos (Transacciones), se realiza desde la capa de negocio.

3 - En el método que atiende el evento click del botón btnInsertar agregaremos las siguientes líneas de código:


private void btnInsertar_Click(object sender, EventArgs e)
{
try
{
string usuario = this.txtUsuario.Text;
string clave = this.txtClave.Text;
int empleado = 1;
this.brlUsuario.prcUsuarioInsertar(empleado, usuario, clave);
this.dgvUsuario.DataSource = this.brlUsuario.funUsuarioObtener();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}

4 - En el método que atiende el evento click del boton btnModificar agregaremos las siguientes líneas de código:


private void btnModificar_Click(object sender, EventArgs e){
try {
if (this.dgvUsuario.SelectedCells.Count == 0){
throw new Exception("Debe seleccionar una fila");
}
int idx = this.dgvUsuario.CurrentRow.Index;
string usuario = this.dgvUsuario[1, idx].Value.ToString();
string clave = this.dgvUsuario[2, idx].Value.ToString();
string newusuario = this.txtUsuario.Text;
string newclave = this.txtClave.Text;
this.brlUsuario.prcUsuarioModificar(usuario, clave, newusuario, newclave);
this.dgvUsuario.DataSource = this.brlUsuario.funUsuarioObtener();
}
catch (Exception ex) {
MessageBox.Show(ex.Message);
}
}

5 - En el método que atiende el evento click del botón btnEliminar agregaremos las siguientes líneas de código:


private void btnEliminar_Click(object sender, EventArgs e){
try {
if (this.dgvUsuario.SelectedCells.Count == 0) {
throw new Exception("Debe seleccionar una fila");
}
int idx = this.dgvUsuario.CurrentRow.Index;
string usuario = this.dgvUsuario[1, idx].Value.ToString();
string clave = this.dgvUsuario[2, idx].Value.ToString();
this.brlUsuario.prcUsuarioEliminar(usuario, clave);
this.dgvUsuario.DataSource = this.brlUsuario.funUsuarioObtener();
}
catch (Exception ex){
MessageBox.Show(ex.Message);
}
}

Bueno señores. Como resumen, podemos ver que LinQ to SQL cumple con todas las especificaciones para trabajar orientado a objetos. ABAJO CON LAS CREENCIAS DE QUE NO SE PODIA PROGRAMAR A OBJETOS CON LINQ.

Claro esta que si se ven los ejemplos introductorios nunca podremos programar OO, pero con este ejemplo, que es totalmente mejorable, se puede observar que cumple con las Bases de la Programación OO sin problemas.

Bueno señores los dejo y espero que antes de fin de mes pueda agregar la capa de datos ejecutada con procedimientos almacenados "LA LLEVA(expreción de muy bueno en Chile) - MOLA (expreción de muy bueno en España)".

No hay comentarios: