labs de prg3-c#

49
Guía de Laboratorios Disciplina de Algoritmos y Programación Materia: Programación III Mar – 2011

Upload: eu-joco

Post on 30-Oct-2015

43 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 1/49

Guía de LaboratoriosDisciplina de Algoritmos y ProgramaciónMateria: Programación III

Mar – 2011

Page 2: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 2/49

Programación II Guía de Laboratorios 2

Elaborado por Ing. Rolando Gonzales docente UTEPSA

Elaborado por erick valverde docente UTEPSA

Page 3: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 3/49

Programación II Guía de Laboratorios 3

Carrera de Informática y Sistemas

Guía de Laboratorios

Materia: Programación III

Contenido página

Laboratorio Nro. 1: ADO.NETEjercicio 1 Creando una Aplicación Simple con acceso a bases de datos sql server  3

Laboratorio Nro. 2: DEFINIENDO UNA ESTRUCTURA DE TRABAJOEjercicio 1 Implementación de la arquitectura de trabajo en tres capas 6

Laboratorio Nro. 3: UTILIZANDO LA ESTRUCTURA DE TRABAJO EN TRES CAPASEjercicio 1: Programación en las capas necesarias todo lo necesario para tener la

funcionalidad de una interfaz grafica de usuario que permita Adicionar, Modificar, eliminar,Buscar, Almacenes de una aplicación de gestión de inventarios.

13

Laboratorio Nro. 4: DEFINIENDO EL MANEJO DE CONTROLES MEDIANTE TECLADOEjercicio 1: En la interfaz grafica de usuario realizada en el laboratorio nro, 3 (Gestión de

almacenes) programar las opciones necesarias para que el usuario pueda manejar loscomandos nuevo, modificar, eliminar, aceptar, cancelar, buscar mediante el teclado (Sin

utilización de mouse)

26

Laboratorio Nro. 5: Programación en Tres Capas – Creando Tablas Para la programación de Ingreso a Inventario (Maestro Detalle)Ejercicio 1: Crear la tablas necesaria en la base de datos bdinventario en sql server, para la

gestión de ingresos a inventario

28

Laboratorio Nro. 6: Programación en Tres Capas – Creando Procedimientosalmacenados Para la programación de Ingreso a Inventario (Maestro Detalle)Ejercicio 1: Crear los procedimientos almacenados necesarios en la base de datos

 bdinventario en sql server, para la gestión de ingresos a inventario.

31

Laboratorio Nro. 7: Reportes Con Crystal Report 40

Ejercicio 1: Crear un reporte en Crystal Report Sobre el modelo de proyecto en tres capas.

Agregando una cuarta capa para la gestión de reportes

Elaborado por erick valverde docente UTEPSA

Page 4: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 4/49

Programación II Guía de Laboratorios 4

LABORATORIO Nro. 1 ADO.NET

Objetivos:Creación de una aplicación Windows con acceso a base de datos en la cual se emplee los componentesADO.NET: Controles de acceso a datos como SqlConnection, Dataset, SqlDataAdapter.

Creación de habilidades en el manejo de Clases de ADO.NET en aplicaciones Windows con C# y ql

Server.

EJERCICIO 1: Crear una aplicación denominada buscar productos el cual permita buscar productos en una base de

datos permitiendo introducir un criterio de búsqueda como ser una parte del nombre de algún producto y la aplicación debe consultar la tabla producto de la base de datos bdinventario y mostrar 

los productos que coincidan con el criterio de búsqueda introducido por el usuario.

PRIMERA PARTE: PREPARANDO LA BASE DE DATOS

Comience Microsoft SQL Server management studio Cree una nueva base de datos con el nombre bdinventario

En la nueva base de datos bdinventario cree una nueva consulta

En la ventana de comandos de consulta escriba:

Elaborado por erick valverde docente UTEPSA

Page 5: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 5/49

Programación II Guía de Laboratorios 5

Seleccione el texto sql escrito y presione F5 para ejecutar el comando sql escrito. (Asegúreseque muestre un mensaje Comandos completados con éxito

Insertando registros a la tabla producto, Cree una nueva consulta

Seleccione todos los comandos escritos y presione F5 para ejecutar

SEGUNDA PARTE: CREANDO LA APLICACIÓN EN C#

Comience la aplicación de C#.Net Creando una nueva aplicación

•En la página de inicio (Start Page) seleccione la opción Create Project…

• Cuando se muestre la ventana de plantillas seleccione una aplicación Windows (Windows

Application)

• En la caja de texto del nombre identifique el proyecto como: Consulta de productos• Haga clic en Accept 

Creando la Interfaz de Usuario

(TextBox, Button, DataGridView)

Adicionar la referencia al espacio de nombres System.Data.SqlClient, en el archvode codigo asociado

En el botón buscar escribir el siguiente código:

Elaborado por erick valverde docente UTEPSA

Page 6: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 6/49

Programación II Guía de Laboratorios 6

Ejecutar la aplicación

LABORATORIO Nro. 2 Programación en Tres Capas

Objetivos:Preparar los proyectos necesarios en c# para la implementación de una aplicación Windows bajo la

arquitectura en tres capas, reutilizando la capa de acceso a datos implementado en el proyecto

Servicios, y un proyecto denominado utilitarios con funcionalidades generales en la aplicación.

EJERCICIO 1: Crear una solución en C# con un proyecto de tipo Aplicación de Windows (Con el nombre

CapaDePresentacion, Un proyecto de tipo Biblioteca de clases (con el nombre CapaDeNegocio)Un proyecto de tipo Biblioteca de clases Servicios (Este debe ser agregado como proyecto

existente, al igual que el proyecto Utilitarios. Para este laboratorio requiere los proyectos Servicios

y Utilitarios.

SEGUNDA PARTE: CREANDO LA APLICACIÓN EN C#

Elaborado por erick valverde docente UTEPSA

Page 7: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 7/49

Programación II Guía de Laboratorios 7

Comience la aplicación de C#.Net Creando una nueva solución en blanco

• Archivo -> Nuevo Proyecto

• Otros tipos de proyectos (Soluciones de Visual Studio)

• Solución en blanco

Click derecho sobre la solución Creada en el explorador de Soluciones Agregar NuevoProuecto Visual C# Aplicación para Windows con el nombre CapaDePresentacion

Click derecho sobre la solución Creada en el explorador de Soluciones Agregar Nuevoproyecto de tipo Biblioteca de Clases con el nombre CapaDeNegocio

Elaborado por erick valverde docente UTEPSA

Page 8: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 8/49

Programación II Guía de Laboratorios 8

Hasta aquí tenemos dos proyectos en nuestra solución, ahora agregaremos la tercera capa, lacapa de Acceso a datos que esta implementada en el proyecto Servicios, asi como también elproyecto utilitarios, Oberve en el explorador de Windows como queda distribuida las carpetas desu solución.

Dentro de la solución inventario tenemos las carpetas de los dos proyectos CapaDeNegocio,CapaDePresentacion, ahora copiaremos en la carpeta inventario las dos carpetas adjuntas a estelaboratorio (Servicios y Utilitario) de modo tal que quede distribuida de la siguiente manera:

En el explorador de soluciones de Visual Estudio Agregaremos a la solución los dos proyectosexistentes uno por uno, primero el proyecto Servicios

Elaborado por erick valverde docente UTEPSA

Page 9: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 9/49

Programación II Guía de Laboratorios 9

Seleccionar los proyectos de la misma carpeta de trabajo

Elaborado por erick valverde docente UTEPSA

Page 10: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 10/49

Programación II Guía de Laboratorios 10

Seleccionar el proyecto dentro de la carpeta Servicios (Servicios.csproj) y abrir.

Con lo cual en el explorador de soluciones tenemos:

Repetir el mismo proceso para agregar el proyecto Utilitario

Elaborado por erick valverde docente UTEPSA

Page 11: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 11/49

Programación II Guía de Laboratorios 11

Finamente tenemos lista nuestra solución con los proyectos necesarios para programar el modeloen tres capas, para finalizar agregamos las referencias entre los distintos proyectos de la solución.

Click derecho en references del Proyecto CapaDeNegocio Agregar referencia

Elaborado por erick valverde docente UTEPSA

Page 12: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 12/49

Programación II Guía de Laboratorios 12

Elegir el proyecto Servicios y aceptarRepetir el mismo proceso para agregar otra referencia a Utilitario.

En la capa de presentación Agregar las siguientes referencias:

A la CapaDeNegocio, a Servicios y Utilitario.

En el proyecto Utilitario debe tener una referencia a Servicio, revisar si ya tiene en caso de notener agregar una referencia a Servicio.

Ahora si ya tenemos, todos los proyectos referenciados y solo queda empezar a programar endiferentes proyectos los códigos que correspondan según el modelo de tres capas. (Este resultadose utilizara para los demás proyectos.

Elaborado por erick valverde docente UTEPSA

Page 13: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 13/49

Programación II Guía de Laboratorios 13

LABORATORIO Nro. 3 Programación en Tres CapasObjetivos:Utilizar la arquitectura de programación en tres capas con acceso a base de datos con procedimientos

almacenados mediante tablas sin llaves foráneas.

EJERCICIO 1: Implementar una interfaz grafica de usuario para gestionar Almacenes (Registrar, Modificar, Eliminar,Buscar para la tabla almacén de la base de datos bdinventario.

Primera Parte Preparando la Base de datos Comience SQL Server, Seleccione la base de datos bdinventario, crear nueva consulta

Ejecutar la consulta para que tengamos una tabla almacén en la base de datos. Crear una nueva consulta para crear el siguiente procedimiento almacenado

Elaborado por erick valverde docente UTEPSA

Page 14: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 14/49

Programación II Guía de Laboratorios 14

Crear otro procedimiento almacenado SP_BuscarAlmacen

Crear otro procedimiento almacenado SP_TraerAlmacen

SEGUNDA PARTE: Programando en C# Ejecutar C# o Visual Estudio Archivo Abrir ->Proyecto o solución (Abra la solución del laboratorio anterior)

Elaborado por erick valverde docente UTEPSA

Page 15: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 15/49

Programación II Guía de Laboratorios 15

Obtendrá la solución que contiene los 4 proyectos creados en el laboratorio anterior. Modificando la capa Servicios (gDatos.cs) para cambiar el nombre del servidor de base dedatos y la base de datos a la cual nos conectaremos.

Modificamos solo el constructor cambiando los atributos BaseDatos por el nombre de la base de

datos en este caso “bdinventario”, el nombre del servidor “.” Indicando que es servidor local.Agregamos una nueva clase a la capa de negocio

Elaborado por erick valverde docente UTEPSA

Page 16: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 16/49

Programación II Guía de Laboratorios 16

Con el nombre Almacen.csY modificar con el siguiente código:using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;

namespace CapaDeNegocio{  public class Almacen : DAL.TDatosSql

{ #region "Atributos"  Int64 id_almacen;  string nombre;

#endregion#region "Propiedades"

  public Almacen(){

id_almacen = 0;nombre = "";

}public Int64 pid_almacen{

  set{id_almacen = value;}  get{return id_almacen;}

}  public string pnombre

Elaborado por erick valverde docente UTEPSA

Page 17: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 17/49

Programación II Guía de Laboratorios 17

{  set{nombre = value;}  get{return nombre;}

}#endregion#region "Metodos"int ABM(Utilitario.Utilitario._ABM tarea)

{  int resultado = 0;System.Object[] P = new System.Object[5];P[0] = tarea;P[1] = pid_almacen;P[2] = pnombre;P[3] = resultado;

  //llamar a un procedimiento almacenadoresultado = Ejecutar("SP_ABMAlmacen", P);

  return resultado;}

  public int guardar(){

  return ABM(Utilitario.Utilitario._ABM.Guardar);}  public int eliminar()

{  return ABM(Utilitario.Utilitario._ABM.Eliminar);

}  public int modificar()

{  return ABM(Utilitario.Utilitario._ABM.Modificar);

}  public DataTable buscarAlmacen(string criterio)

{System.Object[] P = new System.Object[1];

P[0] = criterio;  return TraerDataTable("SP_buscarAlmacen", P);}

  public DataTable traerAlmacen(){

System.Object[] P = new System.Object[1];P[0] = pid_almacen;

  return TraerDataTable("SP_traerAlmacen", P);}#endregion

}}

Agregamos una nueva clase a la capa de negocio con el nombre CtrlAlmacen.cs con el siguientecódigo:

using System;using System.Collections.Generic;using System.Text;using System.Data;using System.Data.SqlClient;

namespace CapaDeNegocio

{  public class CtrlAlmacen : DAL.TDatosSql{

  public int guardar(Almacen objAlmacen)

Elaborado por erick valverde docente UTEPSA

Page 18: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 18/49

Programación II Guía de Laboratorios 18

{  return objAlmacen.guardar();

}  public int modificar(Almacen objAlmacen)

{  return objAlmacen.modificar();

}

  public int eliminar(Almacen objAlmacen){  return objAlmacen.eliminar();

}  public DataTable buscarAlmacen(string criterio)

{  Almacen objAlmacen = new Almacen();

criterio = "%" + criterio + "%";  return objAlmacen.buscarAlmacen(criterio);

}}

}

Agregamos un nuevo formulario a la capa de Presentación: con el nombre FrmAlmacen

Creamos la siguiente interfaz:

Elaborado por erick valverde docente UTEPSA

Page 19: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 19/49

Programación II Guía de Laboratorios 19

Utilizamos label, TextBox, ToolStrip(Para los botones Nuevo,Modificar,Eliminar, Aceptar…)

Modificar los nombres por defecto de los controlestbId_Almacen,tbNombre_Almacen,lbEstado,btnNuevo,btnModificar,btnEliminar,btnAceptar,btnCancelar,btnBuscar,btnSalir

Agregamos otro formulario al proyecto CapaDePresentacion con el nombreFrmBuscarAlmacen.cs

Con la siguiente interfaz grafica

TextBox, DataGridView,Button

A Continuacion el código del formulario FrmBuscarAlmacen.csusing System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;

using System.Text;using System.Windows.Forms;

namespace CapaDePresentacion{  public partial class FrmBuscarAlmacen : Form

{  public CapaDeNegocio.Almacen Registro = new CapaDeNegocio.Almacen();

public FrmBuscarAlmacen(){

InitializeComponent();

}public void ProcesarBuscar(KeyEventArgs e){

  if (e.KeyCode == Keys.Enter)

Elaborado por erick valverde docente UTEPSA

Page 20: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 20/49

Programación II Guía de Laboratorios 20

{CapaDeNegocio.CtrlAlmacen objCA = new 

CapaDeNegocio.CtrlAlmacen();dataGridView1.DataSource =

objCA.buscarAlmacen(tbCriterio.Text);}

}

  private void tbCriterio_KeyDown(object sender, KeyEventArgs e){

ProcesarBuscar(e);}

  private void btnAceptar_Click(object sender, EventArgs e){

ProcesarAceptar();}

  private void ProcesarAceptar(){

  if (dataGridView1.CurrentRow == null)

  return;  int fila = dataGridView1.CurrentRow.Index;Registro.pid_almacen = (Int64)dataGridView1[0, fila].Value;Registro.pnombre = dataGridView1[1, fila].Value.ToString();Close();

}

  private void dataGridView1_DoubleClick(object sender, EventArgs e)

{ProcesarAceptar();

}

  private void dataGridView1_KeyDown(object sender, KeyEventArgs e){

  if (e.KeyCode == Keys.Enter){

ProcesarAceptar();}

}  private void btnCancelar_Click(object sender, EventArgs e)

{Close();

}}

Ahora que tenemos el formulario FrmBuscarAlmacen programado escribimos el código en elformulario FrmAlmacen.cs

using System;

using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;

Elaborado por erick valverde docente UTEPSA

Page 21: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 21/49

Programación II Guía de Laboratorios 21

using System.Text;using System.Windows.Forms;

namespace CapaDePresentacion{  public partial class FrmAlmacen : Form

{ Utilitario.Utilitario._ABM estado;  public FrmAlmacen()

{InitializeComponent();

}

  private void btnSalir_Click(object sender, EventArgs e){

Close();}

  private void btnNuevo_Click(object sender, EventArgs e)

{ controlarNuevo();}

  public void controlarNuevo(){

habilitarEntradas(true);habilitarOperaciones(false);habilitarAceptarCancelar(true);estado = Utilitario.Utilitario._ABM.Guardar;lbEstado.Text = "NUEVO";tbId_Almacen.Focus();

}  public void habilitarEntradas(bool valor)

{ tbId_Almacen.Enabled = valor;tbNombre_Almacen.Enabled = valor;

}  public void habilitarOperaciones(bool valor)

{tsBarra.Items["btnNuevo"].Enabled = valor;tsBarra.Items["btnModificar"].Enabled = valor;tsBarra.Items["btnEliminar"].Enabled = valor;tsBarra.Items["btnBuscar"].Enabled = valor;

}  public void habilitarAceptarCancelar(bool valor)

{

tsBarra.Items["btnAceptar"].Enabled = valor;tsBarra.Items["btnCancelar"].Enabled = valor;}

  private void btnModificar_Click(object sender, EventArgs e){

controlarModificar();}

  public void controlarModificar(){

  if (tbId_Almacen.Text != "" ){

habilitarEntradas (true);tbId_Almacen.Enabled = false;habilitarAceptarCancelar (true);habilitarOperaciones (false);estado = Utilitario.Utilitario._ABM.Modificar;

Elaborado por erick valverde docente UTEPSA

Page 22: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 22/49

Programación II Guía de Laboratorios 22

lbEstado.Text = "MODIFICAR";tbNombre_Almacen.Focus();

}  else  MessageBox.Show("BUSQUE UN ALMACEN PARA MODIFICAR");

}

  private void btnEliminar_Click(object sender, EventArgs e){controlarEliminar();

}  public void controlarEliminar()

{  if (tbId_Almacen.Text != "")

{habilitarAceptarCancelar(true);habilitarOperaciones(false);estado = Utilitario.Utilitario._ABM.Eliminar;lbEstado.Text = "ELIMINAR";

}

  else  MessageBox.Show("BUSQUE UN ALMACEN PARA ELIMINAR");}

  private void btnCancelar_Click(object sender, EventArgs e){

controlarConsulta();}

  public void controlarConsulta(){

habilitarEntradas(false);limpiarEntradas();habilitarOperaciones(true);

habilitarAceptarCancelar(false);estado = Utilitario.Utilitario._ABM.Consulta;lbEstado.Text = "CONSULTA";

}  public void limpiarEntradas()

{tbId_Almacen.Clear();tbNombre_Almacen.Clear();

}

  private void frmalmacen_Load(object sender, EventArgs e){

controlarConsulta();

}

  private void btnAceptar_Click(object sender, EventArgs e){

procesarAceptar();}

  public void procesarAceptar(){

  try{

  switch (estado){

  case Utilitario.Utilitario._ABM.Guardar:procesarGuardar();

  break;  case Utilitario.Utilitario._ABM.Modificar:

procesarModificar();

Elaborado por erick valverde docente UTEPSA

Page 23: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 23/49

Programación II Guía de Laboratorios 23

break;  case Utilitario.Utilitario._ABM.Eliminar:

procesarEliminar();  break;

}controlarConsulta();

}

  catch (Exception E){  MessageBox.Show(E.Message);

}}

  public void procesarGuardar(){

CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);objA.pnombre = tbNombre_Almacen.Text;CapaDeNegocio.CtrlAlmacen objCA = new 

CapaDeNegocio.CtrlAlmacen();  if (objCA.guardar(objA) == 1)

  MessageBox.Show("ALMACEN GUARDADO");  else  MessageBox.Show("NO SE PUDO GUARDAR EL NUEVO ALMACEN");

}  public void procesarModificar()

{CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);objA.pnombre = tbNombre_Almacen.Text;CapaDeNegocio.CtrlAlmacen objCA = new 

CapaDeNegocio.CtrlAlmacen();  if (objCA.modificar(objA) == 1)  MessageBox.Show("ALMACEN MODIFICADO");

  else  MessageBox.Show("NO SE PUDO MODIFICAR EL ALMACEN");}

  public void procesarEliminar(){

CapaDeNegocio.Almacen objA = new CapaDeNegocio.Almacen();objA.pid_almacen = Convert.ToInt64(tbId_Almacen.Text);objA.pnombre = tbNombre_Almacen.Text;CapaDeNegocio.CtrlAlmacen objCA = new 

CapaDeNegocio.CtrlAlmacen();  if (objCA.eliminar(objA) == 1)  MessageBox.Show("ALMACEN ELIMINADO");  else

  MessageBox.Show("NO SE PUDO ELIMINAR EL ALMACEN");}

  private void btnBuscar_Click(object sender, EventArgs e){

procesarBuscar();}

  private void procesarBuscar(){

  FrmBuscarAlmacen objFrmBuscar = new FrmBuscarAlmacen();objFrmBuscar.ShowDialog();

  if (objFrmBuscar.Registro.pid_almacen != 0){

tbId_Almacen.Text =objFrmBuscar.Registro.pid_almacen.ToString();

tbNombre_Almacen.Text = objFrmBuscar.Registro.pnombre;}

Elaborado por erick valverde docente UTEPSA

Page 24: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 24/49

Programación II Guía de Laboratorios 24

}

 }

}

Finalmente Cambiamos el nombre del formulario Form1.cs el cual estaba por defecto en la capa

de Presentación le ponemos el nombre de FrmPrincipal.cs

Y diseñamos la siguiente interfaz. (Utilizamos un menuStrip)

A Continuación programamos en la opción Almacenes el siguiente código:

private void almacenesToolStripMenuItem_Click( object sender, EventArgs e)

{

  FrmAlmacen objFrmAlmacen = new FrmAlmacen();objFrmAlmacen.ShowDialog();}

Generamos la solución que no tenga errores:Y Ejecutamos para probar el ABM de almacenes

Elaborado por erick valverde docente UTEPSA

Page 25: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 25/49

Programación II Guía de Laboratorios 25

LABORATORIO Nro. 4 Programación en Tres Capas – Control de TecladoObjetivos:Definir una estrategia de manejo de las interfaces de usuario mediante el teclado.

EJERCICIO 1: En la interfaz grafica de usuario realizada en el laboratorio nro, 3 (Gestión de almacenes) programar las

opciones necesarias para que el usuario pueda manejar los comandos nuevo, modificar, eliminar,aceptar, cancelar, buscar mediante el teclado (Sin mouse)

Abrir el proyecto de trabajo (Inventario) Abrir en modo diseño el formulario de gestión de almacenes (frmAlmacen.cs) Cambiar la propiedad KeyPreview del formulario por el valor true. Programar el evento KeyDown del formulario por el siguiente código:

private void FrmAlmacen_KeyDown(object sender, KeyEventArgs e){

if (e.Control)

{  switch (e.KeyCode)

{  case Keys.N:  if (btnNuevo.Enabled)

controlarNuevo();  break;  case Keys.M:  if (btnModificar.Enabled)

controlarModificar();  break;  case Keys.E:  if (btnEliminar.Enabled)

controlarEliminar();  break;  case Keys.A:  if (btnAceptar.Enabled)

procesarAceptar();break;

  case Keys.C:  if (btnCancelar.Enabled)

controlarConsulta();  break;  case Keys.B:  if (btnBuscar.Enabled)

procesarBuscar();

  break;  case Keys.S:  if (btnSalir.Enabled)

Close();  break;

}}

}

Elaborado por erick valverde docente UTEPSA

Page 26: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 26/49

Programación II Guía de Laboratorios 26

Cambiar la propiedad ToolTipText por un texto aclarativo sobre las teclas de acceso rápido paracada uno de los botones de comandos como por ejemplo para el btnNuevo: Ctrl + N, para elbtnModificar: Ctrl + M y así sucesivamente para obtener cuando este en ejecución la siguienteapariencia:

Elaborado por erick valverde docente UTEPSA

Page 27: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 27/49

Programación II Guía de Laboratorios 27

LABORATORIO Nro. 5 Programación en Tres Capas – Creando Tablas Para la programaciónde Ingreso a Inventario (Maestro Detalle)Objetivos:Crear la tablas necesaria en la base de datos bdinventario en sql server, para la gestión de ingresos a

inventario.

EJERCICIO 1: Crear la tablas del modelo relaciona seleccionado para la materia en sql server y poblar las tablas

 básicas mediante la consola de sql server.

Abrir Sql Server Management Studio Click derecho sobre la bdinventario y elegir nueva consulta En la consola de sql creada escribir el siguiente script para la creación de las tablas

--------------- TABLAS DE PROVEEDOR -------------------------create table Pais(

id_pais codigo primary key,nombre_pais varchar(50)

)gocreate table Proveedor(id_proveedor codigo primary key,direccion varchar(200) not null,nit codigo,id_pais codigo, foreign key (id_pais) references pais(id_pais) 

)go

create table Juridico

(id_proveedor codigo,razon_social varchar(200) not null,representante varchar(100) null,

 primary key (id_proveedor), foreign key (Id_Proveedor) references Proveedor(id_proveedor))go

create table Natural(id_proveedor codigo,nombre varchar(30) not null,

apellido_paterno varchar(30) not null,apellido_materno varchar(30) not null,fecha_nacimiento datetime not null,

 primary key (id_proveedor), foreign key (id_proveedor) references Proveedor(id_proveedor))GO-------------- TABLAS PARA PRODUCTO--------------------create table TipoProducto(

id_tipoproducto codigo primary key,nombre_tipoproducto varchar(100) not null

)

GOcreate table SubTipoProducto(

Elaborado por erick valverde docente UTEPSA

Page 28: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 28/49

Programación II Guía de Laboratorios 28

id_subtipoproducto codigo primary key,id_tipoproducto codigo,nombre_subtipoproducto varchar(100) not null,foreign key(id_tipoproducto) references 

tipoproducto(id_tipoproducto))GO

Create table Producto(id_producto codigo primary Key,id_subtipoproducto codigo,nombre_producto varchar(200) not null,costo_producto float,stock_minimo float,stock_maximo float,

  foreign key (id_subtipoproducto) references subtipoproducto(id_subtipoproducto) )GO------------ TABLA PARA EL CONTROL DE EXISTENCIA POR ALMACEN ----

Create Table Existencia(id_almacen codigo,id_producto codigo,stock_producto float not null,

 primary key (id_almacen,id_producto), foreign key (id_almacen) references Almacen(id_almacen), Foreign key (id_producto) references Producto(id_producto))GO------------ TABLAS PARA EL INGRESO A INVENTARIO ---------------Create Table Ingreso(

id_ingreso codigo primary key,fecha_ingreso datetime not null,procesado char(1) not null check(procesado = 'S' OR procesado = 'N'),id_proveedor codigo references Proveedor(Id_Proveedor),id_almacen codigo references Almacen(Id_almacen)

)GOCreate Table Detalle_Ingreso(id_ingreso codigo,id_Producto codigo,cantidad float not null,precio_compra float not null,

 constraint PKDetalle_Pedido primary key (Id_ingreso,Id_Producto), constraint FkDetalle_Pedido1 foreign key (Id_ingreso) references ingreso, constraint FkDetalle_Pedido2 foreign key (Id_Producto) references Producto)GO

Seleccionar todo lo escrito (Ctrl + A) y ejecutar (F5) Asegúrese que despliegue el mensaje Comandos completados correctamente

Ejecute las siguientes consultas para poblar tablas basicas

Elaborado por erick valverde docente UTEPSA

Page 29: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 29/49

Programación II Guía de Laboratorios 29

INSERT INTO Pais VALUES (1,'Argentina')GOINSERT INTO Pais VALUES (2,'Bolivia')GOINSERT INTO Pais VALUES (3,'Colombia')GO

INSERT INTO Pais VALUES (4,'Paraguay')GO

INSERT INTO PROVEEDOR VALUES (1,'AV. BENI # 325',4613708010,2)INSERT INTO JURIDICO VALUES (1,'DISTRIBUIDORA AGROBOL SRL','LIC. BISMARMENDEZ')GO

INSERT INTO PROVEEDOR VALUES (2,'AV. LAS AMERICAS # 500',6818703011,2)INSERT INTO NATURAL VALUES (2,'JUAN','GONZALES','FUENTES','10/04/1976')GO

INSERT INTO TIPOPRODUCTO VALUES(1,'LACTEOS')INSERT INTO TIPOPRODUCTO VALUES(2,'FRUTAS')INSERT INTO TIPOPRODUCTO VALUES(3,'VERDURAS')INSERT INTO TIPOPRODUCTO VALUES(4,'CARAMELOS')INSERT INTO TIPOPRODUCTO VALUES(5,'GASEOSAS')INSERT INTO TIPOPRODUCTO VALUES(6,'CERVEZAS')INSERT INTO TIPOPRODUCTO VALUES(7,'CHOCOLATES')INSERT INTO TIPOPRODUCTO VALUES(8,'CEREALES')GOINSERT INTO SUBTIPOPRODUCTO VALUES(1,1,'LECHE')INSERT INTO SUBTIPOPRODUCTO VALUES(2,1,'YOGURT')INSERT INTO SUBTIPOPRODUCTO VALUES(3,2,'CITRICOS')INSERT INTO SUBTIPOPRODUCTO VALUES(4,2,'BASICAS')

INSERT INTO SUBTIPOPRODUCTO VALUES(5,3,'TOMATES')INSERT INTO SUBTIPOPRODUCTO VALUES(6,3,'CEBOLLA')INSERT INTO SUBTIPOPRODUCTO VALUES(7,3,'BROKOLI')

GOINSERT INTO PRODUCTO VALUES (1,1,'LECHE PIL BLANCA BOLSA 1LTS.',2.5,10,100)INSERT INTO PRODUCTO VALUES (2,1,'LECHE LA CAMPIÑA BLANCA BOLSA 1LTS.',1.5,2,20)INSERT INTO PRODUCTO VALUES (3,1,'LECHE DEL CAMPO BLANCA BOLSA 1LTS.',1.5,2,20)INSERT INTO PRODUCTO VALUES (4,2,'YOGURT PIL 90 CC VASITOS',1.20,10,100)INSERT INTO PRODUCTO VALUES (5,2,'YOGURT PIL LIGTH 90 CC

VASITOS',2.50,10,20)

LABORATORIO Nro. 6 Programación en Tres Capas – Creando Procedimientos almacenadosPara la programación de Ingreso a Inventario (Maestro Detalle)

Objetivos:Crear los procedimientos almacenados necesarios en la base de datos bdinventario en sql server, parala gestión de ingresos a inventario.

Elaborado por erick valverde docente UTEPSA

Page 30: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 30/49

Programación II Guía de Laboratorios 30

EJERCICIO 1: Crear procedimientos almacenados (AMB),(Traer, Busquedas), para cada una de las tablas creadas en

el ejercicio del laboratorio 5

Abrir Sql Server Management Studio Click derecho sobre la bdinventario y elegir nueva consulta En la consola de sql creada escribir el siguiente script para la creación de los procedimientos

almacenados

-- PROCEDIMIENTOS ALMACENADOS AMB DE LAS TABLASCREATE Procedure SP_ABMProveedor

@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_proveedor codigo,@direccion varchar(200),

@nit codigo,@id_pais codigo,@resultado integer output --1=ok 0=error

ASif (@tarea=0)

begin  insert into proveedor values (@id_proveedor,@direccion,@nit,@id_pais)

endif (@tarea=1)begin  update proveedor set 

direccion=@direccion,nit=@nit,

id_pais = @id_pais  where id_proveedor=@id_proveedorendif (@tarea=2)begin  delete  from proveedor where id_proveedor=@id_proveedorendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin  set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMJuridico@tarea integer,--1=guardar 2=actualizar 3=Eliminar@id_proveedor codigo,@razon_social varchar(200),

@representante varchar(100),@resultado integer output --1=ok 0=error

ASif (@tarea=0)begin  insert into juridico values (@id_proveedor

,@razon_social,@representante)endif (@tarea=1)begin

Elaborado por erick valverde docente UTEPSA

Page 31: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 31/49

Programación II Guía de Laboratorios 31

update juridico set razon_social=@razon_social,representante=@representante

where id_proveedor=@id_proveedorendif (@tarea=2)begin

  delete  from juridico where id_proveedor=@id_proveedorendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin  set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMNatural@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_proveedor codigo,@nombre varchar(30),@apellido_paterno varchar(30),@apellido_materno varchar(30),@fecha_nacimiento datetime,@resultado integer output --1=ok 0=error

ASif (@tarea=0)

begin  insert into natural values (@id_proveedor,@nombre,@apellido_paterno,@apellido_materno,@fecha_nacimiento)

endif (@tarea=1)begin  update natural set 

nombre=@nombre,apellido_paterno=@apellido_paterno,  apellido_materno=@apellido_materno,

fecha_nacimiento = @fecha_nacimiento 

where id_proveedor=@id_proveedor

endif (@tarea=2)begin  delete  from natural where id_proveedor=@id_proveedorendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin  set @resultado=1  return(0)end

GO

Elaborado por erick valverde docente UTEPSA

Page 32: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 32/49

Programación II Guía de Laboratorios 32

CREATE Procedure SP_ABMTipoProducto@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_tipoproducto codigo,@nombre_tipoproducto varchar(100),@resultado integer output --1=ok 0=error

AS

if (@tarea=0)begin  insert into tipoproducto values (@id_tipoproducto

,@nombre_tipoproducto)endif (@tarea=1)begin  update tipoproducto set 

nombre_tipoproducto=@nombre_tipoproducto  where id_tipoproducto=@id_tipoproductoendif (@tarea=2)begin

  delete from tipoproducto where id_tipoproducto=@id_tipoproductoendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin  set @resultado=1  return(0)end

GOCREATE Procedure SP_ABMSubTipoProducto

@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_subtipoproducto codigo,@id_tipoproducto codigo,@nombre_subtipoproducto varchar(100),@resultado integer output --1=ok 0=error

ASif (@tarea=0)begin  insert into subtipoproducto values 

(@id_subtipoproducto,@id_tipoproducto,@nombre_subtipoproducto)

endif (@tarea=1)begin  update subtipoproducto set 

id_tipoproducto = @id_tipoproducto, nombre_subtipoproducto=@nombre_subtipoproducto

  where id_subtipoproducto=@id_subtipoproductoendif (@tarea=2)begin  delete from subtipoproducto where 

id_subtipoproducto=@id_subtipoproductoendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)

Elaborado por erick valverde docente UTEPSA

Page 33: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 33/49

Programación II Guía de Laboratorios 33

endelsebegin  set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMProducto@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_producto codigo,@id_subtipoproducto codigo,@nombre_producto varchar(200),@costo_producto float,@stock_minimo float,@stock_maximo float,@resultado integer output --1=ok 0=error

ASif (@tarea=0)

begin  insert into producto  values (@id_producto,@id_subtipoproducto,@nombre_producto,

@costo_producto,@stock_minimo,@stock_maximo)endif (@tarea=1)begin  update producto set 

id_subtipoproducto = @id_subtipoproducto, nombre_producto=@nombre_producto,costo_producto = @costo_producto,stock_minimo = @stock_minimo,stock_maximo = @stock_maximo

  where id_producto=@id_productoendif (@tarea=2)begin  delete from producto where id_producto=@id_productoendif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin

  set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMExistencia@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_almacen codigo,@id_producto codigo,@stock_producto float,@resultado integer output --1=ok 0=error

ASif (@tarea=0)begin  insert into existencia

Elaborado por erick valverde docente UTEPSA

Page 34: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 34/49

Programación II Guía de Laboratorios 34

values (@id_almacen,@id_producto,@stock_producto) endif (@tarea=1)begin  update existencia set 

stock_producto= @stock_producto

where id_almacen = @id_almacen and id_producto=@id_productoendif (@tarea=2)begin

delete from existenciawhere id_almacen = @id_almacen and id_producto=@id_producto

endif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelse

begin  set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMIngreso@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_ingreso codigo,@fecha_ingreso datetime,@procesado char(1),@id_proveedor codigo,

@id_almacen codigo,@resultado integer output --1=ok 0=errorAS

if (@tarea=0)begin  insert into ingreso

  values (@id_ingreso,@fecha_ingreso,@procesado,@id_proveedor,@id_almacen)  

endif (@tarea=1)begin  update ingreso set 

fecha_ingreso= @fecha_ingreso,

procesado = @procesado,id_proveedor = @id_proveedor,id_almacen = @id_almacen

where id_ingreso = @id_ingresoendif (@tarea=2)begin

delete from ingresowhere id_ingreso = @id_ingreso

endif (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin

Elaborado por erick valverde docente UTEPSA

Page 35: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 35/49

Programación II Guía de Laboratorios 35

set @resultado=1  return(0)end

GO

CREATE Procedure SP_ABMDetalle_Ingreso

@tarea integer,--0=guardar 1=actualizar 2=Eliminar@id_ingreso codigo,@id_producto codigo,@cantidad float,@precio_compra float, @resultado integer output --1=ok 0=error

ASif (@tarea=0)begin  insert into detalle_ingreso

  values (@id_ingreso,@id_producto,@cantidad,@precio_compra)  

end

if (@tarea=1)begin  update detalle_ingreso set 

cantidad= @cantidad,precio_compra = @precio_compra

  where id_ingreso = @id_ingreso and id_producto = @id_productoendif (@tarea=2)begin

delete from detalle_ingresowhere id_ingreso = @id_ingreso and id_producto = 

@id_productoend

if (@@error <> 0)--Valor de control de transaccionbegin  set @resultado=0  return(0)endelsebegin  set @resultado=1  return(0)end

GO

-- PROCEDIMIENTOS PARA TRAER REGISTROS -------------------Create Procedure SP_TraerProveedor@id_proveedor codigoASIf(@id_proveedor = 0)begin 

SELECT  * from proveedorEndElseBegin

SELECT * FROM proveedor  WHERE id_proveedor = @id_proveedorEndGOCreate Procedure SP_TraerJuridico@id_proveedor codigoAS

Elaborado por erick valverde docente UTEPSA

Page 36: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 36/49

Programación II Guía de Laboratorios 36

If(@id_proveedor = 0)begin 

SELECT  * from juridicoEndElseBegin

SELECT * FROM juridico

  WHERE id_proveedor = @id_proveedorEndGO

Create Procedure SP_TraerNatural@id_proveedor codigoASIf(@id_proveedor = 0)begin 

SELECT  * from naturalEndElseBegin

SELECT * FROM natural  WHERE id_proveedor = @id_proveedorEnd

GO

Create Procedure SP_TraerTipoProducto@id_tipoproducto codigoASIf(@id_tipoproducto = 0)begin 

SELECT  * from tipoproductoEnd

ElseBeginSELECT * FROM tipoproducto

  WHERE id_tipoproducto = @id_tipoproductoEndGO

Create Procedure SP_TraerSubTipoProducto@id_subtipoproducto codigoASIf(@id_subtipoproducto = 0)begin 

SELECT  * from subtipoproducto

EndElseBegin

SELECT * FROM subtipoproducto  WHERE id_subtipoproducto = @id_subtipoproductoEnd

GO

Create Procedure SP_TraerProducto@id_producto codigoASIf(@id_producto = 0)begin 

SELECT  * from productoEndElse

Elaborado por erick valverde docente UTEPSA

Page 37: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 37/49

Programación II Guía de Laboratorios 37

BeginSELECT * FROM producto

  WHERE id_producto = @id_productoEndGO

Create Procedure SP_TraerExistencia

@id_almacen codigo,@id_producto codigoASIf(@id_almacen = 0 and @id_producto = 0)begin 

SELECT  * from existenciaEndElseBegin

SELECT * FROM existencia  WHERE id_almacen = @id_almacen and id_producto = @id_productoEndGO

Create Procedure SP_TraerIngreso@id_ingreso codigoASIf(@id_ingreso = 0)begin 

SELECT  * from ingresoEndElseBegin

SELECT * FROM ingreso  WHERE id_ingreso = @id_ingresoEnd

GO

Create Procedure SP_TraerDetalle_Ingreso@id_ingreso codigoASIf(@id_ingreso = 0)begin 

SELECT  * from detalle_ingresoEndElseBegin

SELECT * FROM detalle_ingreso  WHERE id_ingreso = @id_ingreso

EndGO

-- PROCEDIMIENTOS ALMACENADOS PARA LAS BUSQUEDAS --------CREATE PROCEDURE SP_BuscarProveedor@criterio varchar(250)as(  SELECT p.Id_Proveedor,  (N.Nombre + ' ' + N.Apellido_Paterno + ' ' + N.Apellido_Materno) 

as Nombre_proveedor,p.nit,p.direccion,'N' as tipo  FROM Proveedor p join Natural N on p.Id_Proveedor=N.Id_Proveedor  where  (N.Nombre + ' ' + N.Apellido_Paterno + ' ' + N.Apellido_Materno) like @criterio)union 

Elaborado por erick valverde docente UTEPSA

Page 38: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 38/49

Programación II Guía de Laboratorios 38

(  SELECT p.Id_Proveedor,j.Razon_Social as NombreProveedor,p.nit,p.direccion,'J' as tipo  FROM Proveedor p join Juridico j on p.Id_Proveedor=j.Id_Proveedor  WHERE j.Razon_Social like @criterio)

GO

CREATE PROCEDURE SP_BuscarProducto@criterio varchar(200)ASSelect * from productowhere nombre_producto like @criterioGO

CREATE PROCEDURE SP_BuscarIngreso@id_ingreso codigoASSelect * from Ingreso

where id_ingreso like @id_ingresoGO

LABORATORIO Nro. 7 Reportes Con Crystal Report

Objetivos:Crear un reporte en Crystal Report Sobre el modelo de proyecto en tres capas. Agregando una cuarta

capa para la gestión de reportes

EJERCICIO 1: Crear un reporte bajo el modelo en tres capas que muestre una lista de empleados agrupados por 

 puesto de trabajo.

1.- Agregar a la solucion un nuevo proyecto de tipo class library (Librería de clases nueva)

con el nombre reportes

2.- Agregar un nuevo elemento al proyecto reportes de tipo (conjunto de datos) con el

nombre DSreportes.xsd (este almacenara los datos para los reportes)

Ver grafico ….

Elaborado por erick valverde docente UTEPSA

Page 39: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 39/49

Programación II Guía de Laboratorios 39

3.- Luego abres el DSreportes.xsd y haces click en eplorador de servidores en el enlace

que te mostrara el archivo

Veras las conexiones de bases de datos existentes con todas las tablas de la bd.

4.- Arrastra con el mouse cada tabla del explorador de soluciones encima del contenedor del archivo DSreportes.xsd.

Elaborado por erick valverde docente UTEPSA

Page 40: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 40/49

Programación II Guía de Laboratorios 40

Si las tablas tienen alguna relación se mostrar la relación existente mediante una línea.

5.- Agregar una nueva clase al proyecto reportes con el nombre CtrlReportes.csCon el siguiente código:

using System;using System.Collections.Generic;using System.Text;using System.Data;namespace Reportes{

public class CtrlReportes{

  public DataSet ListadoAlmacen(Int64 IdAlmacen){

  DataSet dsReportes= new DataSet();Negocio.Almacen objalmacen=new Negocio.Almacen();objalmacen.pidAlmacen = IdAlmacen;dsReportes.Tables.Add(objalmacen.Traer_Almacen ());dsReportes.Tables[0].TableName = "Almacen";

  return dsReportes;}

  public DataSet ListadoPedido(Int64 Idpedido){

  DataSet dsReportes = new DataSet(); /*pedido*/Negocio.Gestion_de_pedidos.Pedido objpedido = new 

Negocio.Gestion_de_pedidos.Pedido(); ;objpedido.pId_Pedido = Idpedido;dsReportes.Tables.Add(objpedido.Traer_Pedido ());

Elaborado por erick valverde docente UTEPSA

Page 41: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 41/49

Programación II Guía de Laboratorios 41

dsReportes.Tables[0].TableName = "Pedido"; /*detalle*/Negocio.Gestion_de_pedidos.Detalle_Pedido objdetalle = new Negocio.Gestion_de_pedidos.Detalle_Pedido();

objdetalle.pId_Pedido = Idpedido;dsReportes.Tables.Add(objdetalle.Traer_DetallePedido());dsReportes.Tables[1].TableName = "Detalle_Pedido";

  /*producto*/Negocio.Gestion_de_productos.Producto objproducto = new 

Negocio.Gestion_de_productos.Producto();dsReportes.Tables.Add(objproducto.Traer_producto ());dsReportes.Tables[2].TableName = "Producto";

 /*Proveedor*/Negocio.Gestion_de_proveedor.persistente. Proveedor objproveedor= new Negocio.Gestion_de_proveedor.persistente.Proveedor();

dsReportes.Tables.Add(objproveedor.Traer_proveedor());dsReportes.Tables[3].TableName = "Proveedor";

 /*Proveedor*/Negocio.Gestion_de_proveedor.persistente. Natural objnatural = new Negocio.Gestion_de_proveedor.persistente.Natural();

dsReportes.Tables.Add(objnatural.Traer_Natural ());dsReportes.Tables[4].TableName = "Natural";

/*TipoProducto*/Negocio.Gestion_de_productos.TipoProducto objtipoProducto = new Negocio.Gestion_de_productos.TipoProducto();

dsReportes.Tables.Add(objtipoProducto.Traer_TipoProducto());dsReportes.Tables[5].TableName = "TipoProducto";

/*TipoProducto*/Negocio.Gestion_de_productos.SubTipoProducto objsubtipoProducto =new Negocio.Gestion_de_productos.SubTipoProducto(); dsReportes.Tables.Add(objsubtipoProducto.Traer_SubTipoProducto ());

dsReportes.Tables[6].TableName = "SubTipoProducto";  return dsReportes;

}

}}

6.- Agregamos referencias al proyecto reportes con los demás proyectos capadenegocio,

utilitarios, servicios.

7.- Agregamos un nuevo elemento al proyecto reportes de tipo crystal report

Elaborado por erick valverde docente UTEPSA

Page 42: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 42/49

Programación II Guía de Laboratorios 42

Luego se presenta una confirmación elige reporte en blanco y obtienes el siguiente

grafico

Ahora hay que agregar las tablas y los campos que usaremos en el reporte para eso

utilizamos la conexión que ya hemos trabajado en el archivo xsd.

Click derecho sobre Campos de base de datos y luego Asistente de base de datos como en

el grafico anterior.

Elaborado por erick valverde docente UTEPSA

Page 43: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 43/49

Programación II Guía de Laboratorios 43

Seleccionas datos del proyecto y ADO.NET DATASETS y seleccionas las tablas que

necesites para el proyecto y lo pasas a tablas seleccionadas con el mouse (haciendo click 

en … >)

Luego haces click en aceptar y te listo ahora solo falta arrastrar los campos disponibles

hasta las bandas del reporte donde se quiere que aparezcan.

Bueno luego el reporte tiene una parte que dice sesión detalle para este reporte

necesitaremos dos sesiones ya que se mostrara tipo maestro detalle empleados que

 pertenecen a un determinado puesto por lo tango agregamos una nueva sesión de detalle

Elaborado por erick valverde docente UTEPSA

Page 44: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 44/49

Programación II Guía de Laboratorios 44

Elaborado por erick valverde docente UTEPSA

Page 45: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 45/49

Programación II Guía de Laboratorios 45

Finalmente arrastramos los campos de las tablas como se quiere que aparezcan en el

reporte

Puedes agregar etiquetas de texto haciendo click en

Finalmente el reporte te quedara:

Agregamos un nuevo formulario al proyecto reportes con el nombrefrmReportes

y agregamos un control del tipo:

Elaborado por erick valverde docente UTEPSA

Page 46: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 46/49

Programación II Guía de Laboratorios 46

Al objeto CrystalReportViewer 1 le pones el nombre de visor 

En el código asociado al frmreportes programar lo siguiente:

using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;

namespace reportes{  public partial class FrmReportes : Form

{  public FrmReportes()

{InitializeComponent();

}

  public void MostrarReporte(){

  CtrlReportes CR1 = new CtrlReportes();  switch (Utilitario.Utilitario.Reporte)

{  case 1 :

rptempleadosporpuesto R1 = new rptempleadosporpuesto();

R1.SetDataSource(CR1.ListadoEmpleadoPorPuesto(Utilitario. Utilitario.id_puesto));

visor.ReportSource = R1;  break;  case 2:  /* aqui los demas reportes

Elaborado por erick valverde docente UTEPSA

Page 47: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 47/49

Programación II Guía de Laboratorios 47

Reportes.Gestion_de_pedidos.RptPedidoobjrptpedido=new Reportes.Gestion_de_pedidos.RptPedido(); objrptpedido.SetDataSource(objCtrlReporte.ListadoPedido(Utilitario.Utilitario.Id_Pedido));

visor.ReportSource = objrptpedido;*/ 

break;}}

 private void FrmReportes_Load(object sender, EventArgs e){

MostrarReporte();}

}}

Luego declaras una variable gloval id_puesto en Utilitariosnamespace Utilitario

{  public static class Utilitario{

#region"Variables Glovales"  // para reportes  public static Int64 IdAlmacen;  public static Int64 Id_Pedido;  public static int id_puesto;  public static int Reporte;

#endregion#region "listas Enumeradas"

  public enum _ABM{

Guardar = 0,Modificar = 1,Eliminar = 2,Consulta = 3,

}  public enum ListaReportes{

ListadoAlmacen = 0,ListadoProveedor = 1,ListadoPedido = 2,

}#endregion

#region "metodos"  public static Int64 generarcodigo(DateTime dat)

{  String Hora;  String Minuto;  String Segundo;

  if (dat.Hour.ToString().Length == 1){

Hora = "0" + dat.Hour.ToString();}

  else{

Hora = dat.Hour.ToString();}

  if (dat.Minute.ToString().Length == 1){

Minuto = "0" + dat.Minute.ToString();}

Elaborado por erick valverde docente UTEPSA

Page 48: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 48/49

Programación II Guía de Laboratorios 48

else{

Minuto = dat.Minute.ToString();}

  if (dat.Second.ToString().Length == 1){

Segundo = "0" + dat.Second.ToString();

}  else{

Segundo = dat.Second.ToString();}

  return Int64.Parse(dat.Year.ToString() +dat.Month.ToString() + dat.Day.ToString() + Hora + Minuto + Segundo);

}  public static DateTime leerfecha()

{  DataTable dtfecha = new DataTable();

DAL.TDatosSql objs=new DAL.TDatosSql();dtfecha =objs.TraerDataTable("SP_traer_fecha") ;

  return DateTime.Parse (dtfecha.Rows[0][0].ToString());}

#endregion 

}}

En el botón imprimir del formulario

namespace Capadepresentacion{  public partial class Form1 : Form

{  public Form1()

{InitializeComponent();

}

  public void imprimir(){

Utilitario.Utilitario.id_puesto =Convert.ToInt32(textBox1.Text);

reportes.FrmReportes F = new reportes.FrmReportes();Utilitario.Utilitario.Reporte = 1;F.Show();

 }

  private void button1_Click(object sender, EventArgs e)

{imprimir();

}

Elaborado por erick valverde docente UTEPSA

Page 49: LABs de Prg3-C#

7/16/2019 LABs de Prg3-C#

http://slidepdf.com/reader/full/labs-de-prg3-c 49/49

Programación II Guía de Laboratorios 49

}}