Вы находитесь на странице: 1из 44

Ejercicio

Nuestro sistema registrar a Contactos de Diferentes Profesiones, Pases; los cuales


los tendremos registrados ante una necesidad de obtener sus datos, para hacerlo
sencillo y ser comprensible trabajaremos con 3 tablas en la Base de Datos.
Para empezar, arrancamos Visual Studio y creamos un nuevo proyecto Aplicacin de
Windows Forms denominado sysAgenda.

Como siguiente paso vamos a crear la base de datos:


Haga clic con el botn secundario del ratn sobre el nombre del proyecto y aada un
nuevo elemento del tipo Base de Datos SQL denominado bd_agenda. Esta accin
generar una base de datos vaca.

A continuacin, el asistente para la configuracin de bases de datos mostrar una


ventana que le permitir elegir los objetos de la base de datos con los que va a
trabajar; como est vaca, haga clic en el botn Cancelar.

Obsrvese que los ficheros de la base de datos han sido guardados en el directorio de
la aplicacin. Cuando se ejecute la aplicacin, se trabajar sobre una copia ubicada
en la carpeta donde se encuentre el fichero ejecutable. Seleccione el apartado de la
base de datos en el explorador de soluciones y asegrese de que la propiedad Copiar
en el directorio de resultados tiene el valor Copiar si es posterior.

En el siguiente paso vamos a aadir las tablas a la base de datos. Vamos a crear tres
tablas: tb_profesion, tb_pais y tb_contacto. Para ello, dirjase al explorador de
soluciones y haga doble clic sobre el nodo bd_agenda.mdf . Esto har que se muestre
el explorador de servidores con la composicin de la base de datos:

tb_profesion:

tb_pais

tb_contacto

Ya tenemos las tres tablas. Slo nos falta establecer las relaciones entre ellas. Hay
una forma muy sencilla de hacer esto, y es creando un diagrama visual de base de
datos; dirjase al explorador de servidores, haga clic con el botn secundario del
ratn en el nodo Diagramas de base de datos y ejecute la orden Agregar nuevo
diagrama del men contextual que se visualiza. A continuacin, aada todas las tablas
a ese diagrama. Para relacionar el campo CodigoProfesion de la tabla tb_profesion
con el campo CodigoProfesion de la tabla tb_contacto haga clic con el botn primario
del ratn en el primero y arrastre la correspondencia hasta el segundo. Acepte los
valores por defecto establecidos para la relacin aadida. dem para relacionar el
campo CodigoPais de la tabla tb_pais con el campo CodigoPais de la tabla
tb_contacto

Puede que les pida que elijan los atributos donde existe la relacin entre las tablas de
la siguiente manera

Las relaciones de Entidades son:


De un determinado Pais tenemos Muchos Contactos (Relacin de 1 a muchos)
De una determinada Profesion tenemos Muchos Contactos (Relacin de 1 a muchos)
Procedimientos Almacenados (Porciones de Cdigo Reutilizable en el Servidor se
programan a travs del lenguaje Transact - SQL)
Se crearan de la siguiente manera:

Crearemos los Procedimientos almacenados Bsicos: Insertar, Actualizar, Eliminar


para cada tabla.
Utilizaremos nombre que inicien con sp_tbxxxxxx.
El primer procedimiento ser:
CREATE PROCEDURE sp_tbPaisInsertar
-- Add the parameters for the stored procedure here
@NombrePais varchar(35)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
insert into tb_pais(NombrePais) values (@NombrePais)
END

Luego de modificar el cdigo presionamos el botn Guardar y de esa manera


tendremos un procedimiento almacenado creado.
El resto de los procedimientos quedara de la siguiente manera:
sp_tbPaisModificar (Procedimiento para Actualizar)
CREATE PROCEDURE sp_tbPaisModificar
@CodigoPais int,
@NombrePais varchar(35)
AS
BEGIN
SET NOCOUNT ON;
update tb_pais set NombrePais=@NombrePais where (CodigoPais=@CodigoPais)
END

sp_tbPaisEliminar (Procedimiento para Eliminar)


CREATE PROCEDURE sp_tbPaisEliminar
@CodigoPais int
AS
BEGIN
SET NOCOUNT ON;
delete from tb_pais where (CodigoPais=@CodigoPais)
END

sp_tbPaisListar (Procedimiento para Listar)


CREATE PROCEDURE sp_tbPaisListar
AS
BEGIN
SET NOCOUNT ON;
select * from tb_pais order by NombrePais
END

Procedimientos Almacenados para la Tabla: tb_contacto


sp_tbContactoInsertar (Procedimiento para Insertar Contacto)
CREATE PROCEDURE sp_tbContactoInsertar
@NombreContacto varchar(45),

@DireccionContacto varchar(45),
@TelefonoContacto varchar(12),
@CelularContacto varchar(12),
@EmailContacto varchar(20),
@FechaRegistro smalldatetime,
@CodigoProfesion int,
@CodigoPais int
AS
BEGIN
SET NOCOUNT ON;
insert into
tb_contacto(NombreContacto,DireccionContacto,TelefonoContacto,CelularContacto
,Email
Contacto,FechaRegistro,CodigoProfesion,CodigoPais)values
(@NombreContacto,@DireccionContacto,@TelefonoContacto,@CelularContacto,@Email
Contac
to,@FechaRegistro,@CodigoProfesion,@CodigoPais)
END

sp_tbContactoModificar (Procedimiento para Modificar Contacto)


CREATE PROCEDURE [dbo].[sp_tbContactoModificar]
@CodigoContacto int,
@NombreContacto varchar(45),
@DireccionContacto varchar(45),
@TelefonoContacto varchar(12),
@CelularContacto varchar(12),
@EmailContacto varchar(20),
@FechaRegistro smalldatetime,
@CodigoProfesion int,
@CodigoPais int
AS
BEGIN
SET NOCOUNT ON;
update tb_contacto set
NombreContacto=@NombreContacto,DireccionContacto=@DireccionContacto,TelefonoC
ontact
o=@TelefonoContacto,CelularContacto=@CelularContacto,EmailContacto=@EmailCont
acto,F
echaRegistro=@FechaRegistro,CodigoProfesion=@CodigoProfesion,CodigoPais=@Codi
goPais
where(CodigoContacto=@CodigoContacto)
END

sp_tbContactoEliminar (Procedimiento para Eliminar Contacto)


CREATE PROCEDURE [dbo].[sp_tbContactoEliminar]
@CodigoContacto int
AS
BEGIN
SET NOCOUNT ON;
delete from tb_contacto where(CodigoContacto=@CodigoContacto)
END

sp_tbContactoListar (Procedimiento para Listar Contacto)


CREATE PROCEDURE [dbo].[sp_tbContactoListar]
AS
BEGIN

SET NOCOUNT ON;


select
tb_contacto.CodigoContacto,tb_contacto.NombreContacto,tb_contacto.DireccionCo
ntacto
,tb_contacto.TelefonoContacto,tb_contacto.CelularContacto,tb_contacto.EmailCo
ntacto
,tb_contacto.EmailContacto,tb_contacto.FechaRegistro,tb_pais.NombrePais,tb_pr
ofesio
n.NombreProfesion from tb_contacto,tb_pais,tb_profesion
where(tb_contacto.CodigoProfesion=tb_profesion.CodigoProfesion and
tb_contacto.CodigoPais=tb_pais.CodigoPais)
END

sp_tbContactoListarPorPais (Procedimiento para Listar por Pases)


CREATE PROCEDURE [dbo].[sp_tbContactoListarPorPais]
@CodigoPais int
AS
BEGIN
SET NOCOUNT ON;
select
tb_contacto.CodigoContacto,tb_contacto.NombreContacto,tb_contacto.DireccionCo
ntacto
,tb_contacto.TelefonoContacto,tb_contacto.CelularContacto,tb_contacto.EmailCo
ntacto
,tb_contacto.EmailContacto,tb_contacto.FechaRegistro,tb_pais.NombrePais,tb_pr
ofesio
n.NombreProfesion from tb_contacto,tb_pais,tb_profesion
where(tb_contacto.CodigoProfesion=tb_profesion.CodigoProfesion and
tb_contacto.CodigoPais=tb_pais.CodigoPais and
tb_contacto.CodigoPais=@CodigoPais)
order by tb_contacto.NombreContacto
END

sp_tbContactoListarPorProfesion (Procedimiento para Listar por Profesin)


CREATE PROCEDURE [dbo].[sp_tbContactoListarPorProfesion]
@CodigoProfesion int
AS
BEGIN
SET NOCOUNT ON;
select
tb_contacto.CodigoContacto,tb_contacto.NombreContacto,tb_contacto.DireccionCo
ntacto
,tb_contacto.TelefonoContacto,tb_contacto.CelularContacto,tb_contacto.EmailCo
ntacto
,tb_contacto.EmailContacto,tb_contacto.FechaRegistro,tb_pais.NombrePais,tb_pr
ofesio
n.NombreProfesion from tb_contacto,tb_pais,tb_profesion
where(tb_contacto.CodigoProfesion=tb_profesion.CodigoProfesion and
tb_contacto.CodigoPais=tb_pais.CodigoPais and
tb_contacto.CodigoProfesion=@CodigoProfesion) order by
tb_contacto.NombreContacto
END

Todos los cdigos hasta este momento son para SQL Server es decir: Lado del
Servidor

Ahora en la forma procederemos a agregar una fuente de datos de la siguiente


manera:

Considerando nuestro modelo de BD con tres tablas, desarrollaremos la interfaz del


usuario para la
tabla principal (tb_contacto).
Iniciamos Activando la ventana de propiedades del Form1

Form1
Name
Text
StartPosition
TextBox1
Name
ReadOnly
TextBox2
Name
TextBox3
Name
TextBox4
Name
TextBox5
Name
TextBox6
Name
ComboBox1
Name
DropDownStyle
ComboBox2
Name
DropDownStyle
dataGridView1
Name
AllowUserToAddRows
AllowUserToDeleteRows
ReadOnly
Button1
Name
Text
Button2
Name
Text
Button3
Name
Text
Button4
Name
Text
Button5
Name
Text
Button6

frmContacto
Contactos
CenterScreen
txtCodigo
True
txtNombres
txtDireccion
txtTelefono
txtCelular
txtEmail
cboProfesion
DropDownList
cboPais
DropDownList
dtgDetalle
False
False
True
btnNuevo
Nuevo
btnGrabar
Grabar
btnModificar
Modificar
btnEliminar
Eliminar
btnCancelar
Cancelar

Name
Text
Button7
Name
Text
Nuestro modelo quedara asi:

btnListar
Listar
btnSalir
Salir

Para efectos de facilidad


tb_profesion y tb_pais
Profesion:
Administracin
Derecho
Ingeniera
Ciencias Sociales
Contabilidad

debemos Ingresar datos manualmente a las tablas:


Pais:
Per
Chile
Venezuela
Mxico
Colombia
Argentina

Creando una Clase para la Conexin


Clase: conexin.cs

Agregaremos una referencia al proyecto; click derecho >> Add Reference

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
namespace sysAgenda
{
public class conexion
{
public string LeerConexion()
{
try
{
return
ConfigurationManager.ConnectionStrings["sysAgenda.Properties.
Settings.agendaConnectionString"].ConnectionString;
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
}
}
}

La cadena de conexin:
sysAgenda.Properties.Settings.agendaConnectionString
la obtenemos del archivo : app.config

Crearemos la clase: pais.cs , profesion.cs y contacto.cs


pais.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace sysAgenda
{
public class pais
{
//Creamos un metodo que nos permita listar los paises
//desde el procedimiento almacenado de la sgte. manera
public DataTable ListarPais()
{
//instancia de la clase Conexion
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
//nombre del procedimiento almacenado
SqlCommand cmd = new SqlCommand("sp_tbPaisListar", cn);
cmd.CommandType = CommandType.StoredProcedure;
try

{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable tb = new DataTable();
da.Fill(tb);
return (tb);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
cn.Dispose();
cmd.Dispose();
}
}
}
}

Clase profesion.cs
En nuestra base de datos no tenemos el procedimiento almacenado de listar profesin
por lo que creamos de la siguiente manera.
create PROCEDURE [dbo].[sp_tbProfesionListar]
AS
BEGIN
SET NOCOUNT ON;
select * from tb_profesion order by NombreProfesion
END

El cdigo de la clase es:


using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace sysAgenda
{
public class profesion
{
public DataTable ListarProfesion()
{
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
SqlCommand cmd = new SqlCommand("sp_tbProfesionListar",
cn);
cmd.CommandType = CommandType.StoredProcedure;
try
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable tb = new DataTable();
da.Fill(tb);
return (tb);

}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
cn.Dispose();
cmd.Dispose();
}
}
}
}

Clase: contacto.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
namespace sysAgenda
{
public class contacto
{
//Metodo para agregar contacto
public void AgregarContacto(string xNombreContacto,string xDireccionContacto,string
xTelefonoContacto,string xCelularContacto,string xEmailContacto,DateTime
xFechaRegistro,int
xCodigoProfesion,int xCodigoPais)
{
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
SqlCommand cmd = new SqlCommand("sp_tbContactoInsertar", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@NombreContacto",xNombreContacto);
cmd.Parameters.AddWithValue("@DireccionContacto",xDireccionContacto);
cmd.Parameters.AddWithValue("@TelefonoContacto",xTelefonoContacto);
cmd.Parameters.AddWithValue("@CelularContacto",xCelularContacto);
cmd.Parameters.AddWithValue("@EmailContacto",xEmailContacto);
cmd.Parameters.AddWithValue("@FechaRegistro",xFechaRegistro);
cmd.Parameters.AddWithValue("@CodigoProfesion",xCodigoProfesion);
cmd.Parameters.AddWithValue("@CodigoPais",xCodigoPais);
try
{
cn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{

cn.Dispose();
cmd.Dispose();
}
}
//Metodo para modificar contacto
public void ModificarContacto(int xCodigoContacto,string xNombreContacto, string
xDireccionContacto,
string xTelefonoContacto, string xCelularContacto, string xEmailContacto, DateTime
xFechaRegistro, int
xCodigoProfesion, int xCodigoPais)
{
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
SqlCommand cmd = new SqlCommand("sp_tbContactoModificar", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CodigoContacto", xCodigoContacto);
cmd.Parameters.AddWithValue("@NombreContacto", xNombreContacto);
cmd.Parameters.AddWithValue("@DireccionContacto", xDireccionContacto);
cmd.Parameters.AddWithValue("@TelefonoContacto", xTelefonoContacto);
cmd.Parameters.AddWithValue("@CelularContacto", xCelularContacto);
cmd.Parameters.AddWithValue("@EmailContacto", xEmailContacto);
cmd.Parameters.AddWithValue("@FechaRegistro", xFechaRegistro);
cmd.Parameters.AddWithValue("@CodigoProfesion", xCodigoProfesion);
cmd.Parameters.AddWithValue("@CodigoPais", xCodigoPais);
try
{
cn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
cn.Dispose();
cmd.Dispose();
}
}
//Metodo para eliminar contacto
public void EliminarContacto(int xCodigoContacto)
{
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
SqlCommand cmd = new SqlCommand("sp_tbContactoEliminar", cn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@CodigoContacto", xCodigoContacto);
try
{
cn.Open();
cmd.ExecuteNonQuery();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}

finally
{
cn.Dispose();
cmd.Dispose();
}
}
public DataTable ListarContacto()
{
conexion cnn = new conexion();
SqlConnection cn = new SqlConnection(cnn.LeerConexion());
SqlCommand cmd = new SqlCommand("sp_tbContactoListar", cn);
cmd.CommandType = CommandType.StoredProcedure;
try
{
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable tb = new DataTable();
da.Fill(tb);
return (tb);
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
cn.Dispose();
cmd.Dispose();
}
}
}
}

La interfaz Grfica quedar de la siguiente Manera:

Desarrollo de Cdigo para los Controles del Formulario:


Variables de alcance del Formulario
public partial class frmContacto : Form
{
//Variable para ID de Contacto
string ID;
//Variable que nos indicara
//si pulsa Nuevo o Modificar
private int temp = 0;
//para obtener la fecha actual en una variable
DateTime fechaActual = DateTime.Now;

Evento Load del Formulario


private void frmContacto_Load(object sender, EventArgs e)
{

//Manejo de controles
//Para su mejor comprension lo haremos de manera detallada
txtNombres.ReadOnly =true;
txtDireccion.ReadOnly = true;
txtTelefono.ReadOnly = true;
txtCelular.ReadOnly = true;
txtEmail.ReadOnly = true;
cboProfesion.Enabled = false;
cboPais.Enabled = false;
//Botones
btnNuevo.Enabled = true;
btnGrabar.Enabled = false;
btnModificar.Enabled = false;
btnCancelar.Enabled = false;
btnEliminar.Enabled = false;
btnListar.Enabled = true;
btnSalir.Enabled = true;
//Grid
dtgDetalle.Enabled = true;
//Mostrar el contenido del Grid
MostrarGrid();
MostrarPais();
MostrarProfesion();
}

Procedimientos dentro del Formulario


private void MostrarGrid()
{
contacto persona = new contacto();
dtgDetalle.DataSource=persona.ListarContacto();
}
private void MostrarPais()
{
pais miPais = new pais();
cboPais.DataSource=miPais.ListarPais();
cboPais.DisplayMember ="NombrePais";
cboPais.ValueMember = "CodigoPais";
}
private void MostrarProfesion()
{
profesion miProfesion = new profesion();
cboProfesion.DataSource = miProfesion.ListarProfesion();
cboProfesion.DisplayMember = "NombreProfesion";
cboProfesion.ValueMember = "CodigoProfesion";
}

Evento Click del Boton NUEVO


private void btnNuevo_Click(object sender, EventArgs e)
{
temp = 0;
// Valores en Blanco
txtNombres.Text = "";
txtDireccion.Text = "";
txtTelefono.Text = "";
txtCelular.Text = "";
txtEmail.Text = "";

// Controles
txtNombres.ReadOnly = false;
txtDireccion.ReadOnly = false;
txtTelefono.ReadOnly = false;
txtCelular.ReadOnly = false;
txtEmail.ReadOnly = false;
cboProfesion.Enabled = true;
cboPais.Enabled = true;
//Botones
btnNuevo.Enabled = false;
btnGrabar.Enabled = true;
btnModificar.Enabled = false;
btnCancelar.Enabled = true;
btnEliminar.Enabled = false;
btnListar.Enabled = false;
btnSalir.Enabled = false;
//Grid
dtgDetalle.Enabled = false;
//Foco
txtNombres.Focus();
}

Evento Click del Boton GRABAR


private void btnGrabar_Click(object sender, EventArgs e)
{
if (txtNombres.Text.Trim().Length > 0)
{
cto Persona = new contacto();
if (temp == 0)
{
Persona.AgregarContacto(txtNombres.Text,txtDireccion.Text,txtTele
fono.Text,txtCelul
ar.Text,txtEmail.Text,fechaActual,Convert.ToInt32(cboProfesion.Se
lectedValue.ToStri
ng()),Convert.ToInt32(cboPais.SelectedValue.ToString()));
}
else
{
Persona.ModificarContacto(Convert.ToInt32(ID),txtNombres.Text,
txtDireccion.Text, txtTelefono.Text, txtCelular.Text,
txtEmail.Text, fechaActual,
Convert.ToInt32(cboProfesion.SelectedValue.ToString()),
Convert.ToInt32(cboPais.SelectedValue.ToString()));
}
// capa en los controles
txtNombres.ReadOnly = true;
txtDireccion.ReadOnly = true;
txtTelefono.ReadOnly = true;
txtCelular.ReadOnly = true;
txtEmail.ReadOnly = true;
cboProfesion.Enabled = false;
cboPais.Enabled = false;
//Botones
btnNuevo.Enabled = true;
btnGrabar.Enabled = false;
btnModificar.Enabled = false;
btnCancelar.Enabled = false;
btnEliminar.Enabled = false;

btnListar.Enabled = true;
btnSalir.Enabled = true;
//Grid
dtgDetalle.Enabled = true;
dtgDetalle.Focus();
MostrarGrid();
}
}

Evento Click del Boton MODIFICAR


private void btnModificar_Click(object sender, EventArgs e)
{
if ((dtgDetalle.Rows.Count > 0) &&
(dtgDetalle.CurrentRow.Cells[0].Value != null))
{
temp = 1;
ID = dtgDetalle.CurrentRow.Cells[0].Value.ToString();
// capa en los controles
txtNombres.ReadOnly = false;
txtDireccion.ReadOnly = false;
txtTelefono.ReadOnly = false;
txtCelular.ReadOnly = false;
txtEmail.ReadOnly = false;
cboProfesion.Enabled = true;
cboPais.Enabled = true;
//Botones
btnNuevo.Enabled = false;
btnGrabar.Enabled = true;
btnModificar.Enabled = false;
btnCancelar.Enabled = true;
btnEliminar.Enabled = false;
btnListar.Enabled = false ;
btnSalir.Enabled = false;
//Grid
dtgDetalle.Enabled = false;
}
}

Evento Click del Boton CANCELAR


private void btnCancelar_Click(object sender, EventArgs e)
{
txtNombres.ReadOnly = true;
txtDireccion.ReadOnly = true;
txtTelefono.ReadOnly = true;
txtCelular.ReadOnly = true;
txtEmail.ReadOnly = true;
cboProfesion.Enabled = false;
cboPais.Enabled = false;
//Botones
btnNuevo.Enabled = true;
btnGrabar.Enabled = false;
btnModificar.Enabled = false;
btnCancelar.Enabled = false;
btnEliminar.Enabled = false;
btnListar.Enabled = true;
btnSalir.Enabled = true;

//Grid
dtgDetalle.Enabled = true;
dtgDetalle.Focus();
}

Evento Click del Boton SALIR


private void btnSalir_Click(object sender, EventArgs e)
{
this.Close();
}

Evento Click del Boton ELIMINAR


private void btnEliminar_Click(object sender, EventArgs e)
{
if ((dtgDetalle.Rows.Count > 0) &&
(dtgDetalle.CurrentRow.Cells[0].Value != null))
{
DialogResult resultado = MessageBox.Show("Esta Seguro que desea
Eliminar ?", "Eliminar", MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
if (resultado == DialogResult.Yes)
{
ID = dtgDetalle.CurrentRow.Cells[0].Value.ToString();
contacto persona = new contacto();
persona.EliminarContacto(Convert.ToInt32(ID));
MostrarGrid();
}
}
else
{
MessageBox.Show("No se selecciono datos.", "Eliminar",
MessageBoxButtons.OK, MessageBoxIcon.Warning);
}
}

Evento Cell Enter del DataGrid View


private void dtgDetalle_CellEnter(object sender, DataGridViewCellEventArgs e)
{
txtCodigo.Text = dtgDetalle.CurrentRow.Cells[0].Value.ToString();
txtNombres.Text = dtgDetalle.CurrentRow.Cells[1].Value.ToString();
txtDireccion.Text= dtgDetalle.CurrentRow.Cells[2].Value.ToString();
txtTelefono.Text= dtgDetalle.CurrentRow.Cells[3].Value.ToString();
txtCelular.Text = dtgDetalle.CurrentRow.Cells[4].Value.ToString();
txtEmail.Text = dtgDetalle.CurrentRow.Cells[5].Value.ToString();
cboProfesion.Text = dtgDetalle.CurrentRow.Cells[8].Value.ToString();
cboPais.Text = dtgDetalle.CurrentRow.Cells[7].Value.ToString();
// Podemos Modificar u Eliminar
btnModificar.Enabled = true;
btnEliminar.Enabled = true;
}

Desarrollo de Reportes
Un sistema sin reporte que emita prcticamente no estara cumpliendo su ciclo de
vida completo, por tal motivo iniciaremos un reporte simple con fines didcticos.
Agregaremos un nuevo Formulario a nuestro proyecto

Nombre: frmListaContactos

Arrastrar el control CrystalReportViewer al Formulario

Hacer Click en el Asistente para enlazar al Origen de Datos.


Click en Create a New

Crear el archivo con el nombre: rptListaContactos.rpt

Click en Ok

Utilizaremos el Asistente:

Seleccionamos el Procedimiento Almacenado que nos Lista los Contactos.

Al terminar el asistente Click en Finish


El report a modo diseo es la siguiente ventana

Codigo en el evento Load del formulario: frmListaContactos


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace sysAgenda
{
public partial class frmListaContactos : Form
{
public frmListaContactos()

{
InitializeComponent();
}
private void frmListaContactos_Load(object sender, EventArgs e)
{
contacto persona = new contacto();
rptListaContactos rpt = new rptListaContactos();
rpt.SetDataSource(persona.ListarContacto());
this.crystalReportViewer1.ReportSource = rpt;
this.crystalReportViewer1.DisplayGroupTree = false;
}
}
}

Nuevamente en nuestro formulario:

Botn Listar evento Click


private void btnListar_Click(object sender, EventArgs e)
{
frmListaContactos frm = new frmListaContactos();
frm.Show();
}

El ltimo paso es agregar el siguiente cdigo al archivo de configuracin del sistema:

Finalmente el sistema funcionar.


Agradezco el haberme seguido hasta la parte final asimismo espero que Uds queden
satisfechos.

Вам также может понравиться