FUNCIONALIDAD DESDE VISUAL C # 2008
A continuación se muestran todos los pasos a realizar para luego desarrollarlos a profundidad más adelante con ayuda de capturas de pantalla.
1) Crear un proyecto de visual C# con visual Studio
2) Agregar un archivo de configuración, el cual administrara la cadena de conexión de la base de datos, existen dos formas de agregar este archivo, también se explicara cuál es su importancia en un proyecto de software con vs.
3) Agregar las referencias necesarias para trabajar con MYSQL y el archivo appconfig.
4) Crear una carpeta en la cual se van a guardar todas las clases de nombre MisClases.
5) Crear una clase de Nombre Cadena.cs la cual se comunicara con el archivo app config y obtener la cadena de conexión.
6) Insertar en el formulario todos los elementos necesarios para insertar, editar, 4eliminar y buscar.
7) clase de nombre Mostrar.cs, para agregar la función de mostrar el usuario desde el formulario.
8) clase de nombre Buscar.cs, para agregar la función de Buscar un usuario desde el formulario.
9) clase de nombre Insertar.cs, para agregar la función de agregar un usuario desde el formulario.
10) clase de nombre Editar.cs, para agregar la función de Editar un usuario desde el formulario.
11) clase de nombre Eliminar.cs, para agregar la función de Eliminar un usuario desde el formulario.
12) Prueba y ejecución.
1)
CREAR UN
PROYECTO DE VISUAL C# CON VISUAL STUDIO
1.2 Creamos un nuevo
proyecto
1.3 Escogemos el lenguaje visual c#, la opcion de
windows form y por ultimo le cambiamos
el nombre de cómo se quiere llamar al proyecto(los tres pasos estan resaltados)
por ultimo clic en aceptar.
Espacio de trabajo
2)
AGREGAR
UN ARCHIVO DE CONFIGURACIÓN
Un archivo de configuración es
aquel que proporcionara La cadena de conexión, en la que se especifica sistema
manejador de base de datos ( Mysql en este caso ), la base de datos a utilizar,
el servidor y la contraseña de acceso
para la misma asi :
MySqlConnection conn
= new MySqlConnection("server=127.0.0.1; database=biblioteca; Uid=root; pwd=123456;");
Las palabras resaltadas son las que pueden ser cambiadas, en
este caso la base de datos se llama biblioteca
y la contraseña es 123456 los demás valores quedan igual.
2.1 Explicación de la
importancia de un archivo de configuración
Tomado de parvulos.net
Imagine,
que hoy desarrolla un sistema con 20 Formularios, la cual va a instalar en 50
Pc’s que utilizaran para la administración de su empresa, su conocimiento sobre
las ventajas de usar un archivo de configuración es nula, así que usted uso lo
que muchos programadores llegamos a utilizar en nuestro inicios, establecer la
cadena de conexión en cada método o función donde necesitemos comunicarnos con
la Bd, algo como esto:
C#:
C#:
using System.Data.SqlClient;
private void btnProbar_Click(object
sender, EventArgs e)
{
using(SqlConnection cnx = new
SqlConnection("Data Source=LUISESCOBAR-PC;Initial Catalog=Directorio;Integrated
Security=True"))
{
cnx.Open();
MessageBox.Show(cnx.State.ToString());
}
}
y para los que tienen mas experiencia pero aun no llegan a conocer los beneficios del archivo de configuración, establecer la cadena de conexión en una variable global del tipo String podría aparentar ser una buena solución ya que se asigna una sola vez y se usa en todas las consultas requeridas.
C#:
using System.Data.SqlClient;
namespace sinAppConfig
{
public
class Connection
{
public
static SqlConnection Conexion()
{
return
new SqlConnection("Data Source=LUISESCOBAR-PC;Initial Catalog=Directorio;Integrated
Security=True");
}
}
}
Usamos la clase Connection:
private void btnProbar_Click(object
sender, EventArgs e)
{
//Utilizamos la clase connection para
abrir la cadena de conexion
using(SqlConnection cnx = Connection.Conexion())
{
cnx.Open();
MessageBox.Show(cnx.State.ToString());
}
}
Bien,
continuando con nuestro caso hipotético, imagínese que después de algún tiempo
se le notifica de la necesidad de modificar el nombre del server o la ubicación
física del mismo, trayendo con esto la necesidad de modificar nuestra cadena de
conexión pero, como declaro su cadena de conexión en alguna clase publica o
modulo para los de Vb.net y esta clase o modulo se comprimió junto con el Exe
al momento de crear su installer ya no tiene acceso a ella desde fuera del
proyecto, así que no tendrá otra opción que abrir su proyecto desde el Vs y
modificar su cadena de conexión en el lugar donde lo haya declarado, si es en
una clase publica o modulo solo tendrá que modificar una sola vez pero, si
declaro la cadena en cada método o función donde se requería la comunicación
con la Bd tendrá un problema mas grande (aunque no monstruoso), en realidad
modificar la cadena de conexión no será el problema puesto que usando la
combinación de teclas Ctrl + F podrá fácilmente buscarla y reemplazarla por la
nueva.
El problema viene al momento de pasar esta actualización a todas las instalaciones de su Software, ya que como sabrá, al momento de hacer la modificación tendrá que compilar de nuevo los proyectos (el que contiene su desarrollo y el proyecto Setup) e ir a cada equipo donde su software este instalado, desinstalar y posteriormente instalar de nuevo su software, este es el verdadero problema ya que como se abra dado cuenta, no es tarea sencilla ya que la actividad no se resume en una acción si no en varias, ahora si consideramos la disponibilidad de los usuarios para dejarnos trabajar a nosotros mientras ellos se retrasan en sus actividades, estaremos en un problema.
El problema viene al momento de pasar esta actualización a todas las instalaciones de su Software, ya que como sabrá, al momento de hacer la modificación tendrá que compilar de nuevo los proyectos (el que contiene su desarrollo y el proyecto Setup) e ir a cada equipo donde su software este instalado, desinstalar y posteriormente instalar de nuevo su software, este es el verdadero problema ya que como se abra dado cuenta, no es tarea sencilla ya que la actividad no se resume en una acción si no en varias, ahora si consideramos la disponibilidad de los usuarios para dejarnos trabajar a nosotros mientras ellos se retrasan en sus actividades, estaremos en un problema.
¿Solución? usar el archivo de configuración….
Si utiliza un archivo de configuración no tendrá tantos problemas, ya que el utilizarlo simplifica la tarea a únicamente ir al directorio de instalación ubicar el archivo App.Config, abrirlo con un editor de texto como NotePad, modificar su cadena de conexión, guardar y listo a seguir usando su aplicación sin mas ni mas; no necesita abrir el proyecto en el Vs ni compilar, mucho menos instalar
De
nuevo.
¿Comprende ahora la gran utilidad de este archivo tan simple?…
Hasta este punto creo que ya esta convencidos
de la utilidad del archivo de configuración
existen dos
existen dos formas de agregar un archivo de configuración las cuales se explicaran en detalle acontinuacion, escoje una
2.2 FORMA N° 1 DE
AGREGAR EL APPCONFIG
Clic en proyecto
y propiedades de aplicación
Abre
el archivo appconfig con doble clic o clic derecho abrir, copia y pega el
siguiente código y guarda cambios.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= bdbiblioteca; Uid=root;
pwd=123456"
providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>
</configuration>
Las
palabras resaltadas corresponden al nombre de la base de datos y a la
contraseña.
APPcadena: es el nombre que se utilizara para
poder tener acceso a este archivo
2.3 FORMA N° 2 DE
AGREGAR EL APPCONFIG
Sigue
las imágenes los pasos se resaltaran de
color
Nota: si haces todos los
pasos y no sale nada, borra el proyecto, crea uno nuevo y realiza los pasos
nuevamente. Está a su gusto por cuál de los dos métodos de agregar el archivo
appconfig escoger, les recomiendo el primero.
Una vez agregado el archivo
appconfig, solo queda configurarlo, para esto
abrimos el archivo con doble clic o clic derecho abrir, debe quedar algo
igual a esto:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="WindowsFormsApplication1.Properties.Settings.bibliotecaConnectionString"
connectionString="server=127.0.0.1;user
id=root;password=123456;database=biblioteca"
providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>
</configuration>
Solo falta
cambiar lo que esta seleccionado por un nombre mas corto, de esta manera se va
a llamar la cadena de conexión y guardar cambios,quedaria asi:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= biblioteca; Uid=root;
pwd=123456"
providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>
</configuration>
Nota: los elementos resaltados corresponden a la base de datos y la
contraseña de la misma
3) AGREGAR LAS
REFERENCIAS NECESARIAS PARA TRABAJAR CON MYSQL Y EL ARCHIVO APPCONFIG.
4)
crear una carpeta en el proyecto de nombre MisClases,
para esto clic derecho sobre el proyecto,
agregar, nueva carpeta.
5) Crear una clase de
Nombre Cadena.cs en la carpeta
creada, la cual se comunicara con el archivo appconfig y obtendrá la cadena de
conexión. Clic derecho sobre la carpeta MisClases,
Agregar,Clase, por ultimo aceptar.
Pegamos el siguiente código
en la clase y guardamos cambios:
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Configuration; //para trabajar con el archivo
de configuracion
namespace Aplicacion.MisClases//nombre de la aplicación y carpeta de clases es importante
tener en cuenta los nombres tanto del proyecto como la de la carpeta
{
class Cadena
{
public string
CadenaApp;
public string Obtenercadena()
{
// este
metodo se usa para obener la cadena de conexion que
// esta en el archivo appconfig en
donde
//se
encuentra la cadena de conexion
CadenaApp = ConfigurationManager.ConnectionStrings["APPcadena"].ConnectionString;
return CadenaApp;
}
}
}
Nota:
“APPcadena” debe ser el mismo
nombre que esta en el archivo de configuracion
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="APPcadena"
connectionString="server=127.0.0.1; database= biblioteca; Uid=root;
pwd=123456"
providerName="MySql.Data.MySqlClient"
/>
</connectionStrings>
</configuration>
Para ver si todo va bien sobre la aplicación o sobre la solucion clic
derecho generar
6) Insertar en el formulario todos los elementos necesarios
para insertar, editar, eliminar y buscar
se agregan 5 label , 4 textbox ,2
groupbox y 4 botones y en la propiedad name escribe los nombres que están en la
imagen, luego en la propiedad Charactercasing
de cada textbox cambiarla a upper para
que el texto ingresado sea en mayúscula .
7) Mostrar Datos: Para que los datos que están en la tabla Usuarios se
puedan ver en el formulario a través del detegridview, es necesario agregar una
clase de nombre Mostrar.cs, para
crearla se puede apoyase del paso 5, es decir
·
Clic derecho sobre la carpeta MisClases
·
Agregar
·
Clase
·
Verificar que Archivo de código este seleccionado
·
Colocarle el nombre Mostrar.cs
·
Clic en botón aceptar
Una
vez que se crea la clase, se abre automáticamente, copia y pega el siguiente
código el cual tiene su explicación.
//biblioteca de
clases creadas por el visual studio
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
//biblioteca de
clases creadas por el programador
using
System.Data;// para operaciones con datos
using
MySql.Data;// para operacines con mysql
using
MySql.Data.MySqlClient;
using
System.Windows.Forms;// para poder recibir controles
por parametros
using Aplicacion.MisClases;// para tener acceso a la carpeta MisClases
namespace Aplicacion.MisClases //Cambia lo resaltado por el nombre del
proyecto que estes usando en caso que utilices otro nombre
{
class Mostrar//este es el
nombre de la clase,si le colocaste otro nombre cambialo aquí tambien
{
Cadena Obj = new Cadena();// creamos un
objeto de la clase Cadena
/* PARAMETROS
QUE RECIBE LA FUNCION MostrarDatos
* parametro 1: datagrid en donde se va
mostrar los datos
* parametro 2: Nombre del
procedimiento almacenado
* parametro 3: Dato buscado ejemplo
cuando se busca por nombre
* parametro 4: Nombre del parametro
que recibe el procedimiento almacenado en la bd */
public void MostrarDatos(DataGridView
dataGrid, string Nombreprocedmiento, string DatoBuscado, string
Nombreparametro)
{
Nombreparametro= "@"+ Nombreparametro;
string
CadenaApp;
CadenaApp = Obj.Obtenercadena();// a traves del objeto Obj accede a la clase cadena y retorna la cadena de conexion que
envia el appconfig
String
stm = Nombreprocedmiento;
MySqlConnection
conn = new MySqlConnection(CadenaApp); // se crea un objeto de la clase MySqlConnection a el cual se le envia por parametro la
cadena de conexion
DataTable
odtable = new DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter odadapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new
MySqlCommand(stm, conn);
cmd.CommandType
= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue(Nombreparametro, "%"
+ DatoBuscado + "%");// para que a mendidia que se escriba valla mostrando los
valores
cmd.Parameters[Nombreparametro].Direction = ParameterDirection.Input;
odadapter.SelectCommand = cmd;
odadapter.Fill(odtable);
dataGrid.DataSource = odtable;
}
catch
(Exception ex)
{
MessageBox.Show("No se puedes mostrar los datos verifique la
conexion e intente nuevamente !!" + ex.Message);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
Se
quiere que cuando se ejecute el formulario se carguen los datos de la tabla
usuarios por lo tanto esta clase se debe ejecutar cuando cargue el formulario. Escribe
lo siguiente en el load del form, para esto doble clic en cualquier parte del
form que no tenga control o doble clic en la barra de titulo del formulario.
quedara asi:
private void Form1_Load(object
sender, EventArgs e)
{
}
Agrega los
siguientes bibliotecas de clases esto va debajo de los
demas using
using
System.Data;// para operaciones con datos
using
MySql.Data;// para operacines con mysql
using
MySql.Data.MySqlClient;
using
Aplicacion.MisClases;
por ultimo crear un
objeto de la clase mostrar de arriba del load del form , copia y pega lo que
esta en su interior:
Mostrar
MostrarUsuarios= new Mostrar();//objeto de la clase mostrar
private void
Form1_Load(object sender, EventArgs e)
{
//El
objeto MostrarUsuario accede a la clase Mostrar y hace usuo de la funcion
MostrarDatos
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario",
"", "NombreABuscar");
/*PARAMETROS
DE LA FUNCION MostrarUsuarios
* DrgListaUsuarios: es el datagrid
en donde se mostraran los datos
* BuscarUsuario: es el nombre de
procedimiento creado en la bd es el que se va a ejecutar
* " " el tercer parametro es
vacio para que muestre todos los registros
* NombreABuscar:Es el nombre del
parametro que recibe el procedimiento almacenado BuscarUsuario que se encuentra
en la bd debe ser el mismo
*/
}
Nota: el objeto
MostrarUsuario puede ir arriba del load o como se muestra en la siguiente
imagen
Imagen de todo el
proceso, ubica los codigos proporcionados en el lugar exacto
Una vez que hecho los pasos anteriores
ejecuta el formulario con F5
Una
de las características de la Programación orientada a objetos es reducir la
codificación, partiendo de este principio la clase Mostrar.cs es tan potente
que esta adaptada para que ejecute cualquier procedimiento almacenado similar
al de BuscarUsuarios, por ejemplo
suponiendo que se tiene una tabla administrador con sus respectivos id , nombres
y demás y también se quiere buscar ya sea por nombre o por apellido, solo tocaría
crear un procedimiento almacenado para la nueva tabla crear un nuevo objeto de
la clase mostrar y mandarles los correspondientes parámetros en el load del
form o en donde se requiera.
8)
Funcionalidad buscar: Esta
función, ejecuta el mismo procedimiento almacenado utilizado en la función
mostrar, solo que esta vez en el espacio “
” correspondiente al tercer parámetro será cambiado por el texto que se escriba en el textbox TxtBuscar,
para esto darle doble clic sobre el control TxtBuscar y agregar el siguiente
código :
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario",this.Txtbuscar.Text, "NombreABuscar");
Quiedaria asi
private void Txtbuscar_TextChanged(object
sender, EventArgs e)
{
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario",this.Txtbuscar.Text, "NombreABuscar");
Ejecuta
el formulario con F5, veras que inicialmente se cargan en el datagridview DrgLIstaUsuarios todos los registros
que están en la tabla usuarios, al ingresar la primera letra en el textbox buscar
(Txtbuscar) veras que en el datagrid solo se cargaran los usuarios que tengan
la letra o frase a buscar en cualquier parte de la palabra (inicio, mitad,
final).asi por ejemplo si escribimos textbox buscar (Txtbuscar) la letra J o se escribe la palabra completa
johana, solo muestra todos los datos del
usuario Johana, puesto que es el único usuario que tiene esas letras en su nombre asi:
Pero si escribimos la letra I como inicio de una palabra
el usuario Johana no será mostrado por
que no tiene I en ninguna parte del nombre:
Imagen de apoyo
Y
si se escribe las letras IA, solo mostrara a RICARDO ANTONIO RODRIGUEZ que es
el único usuario que tiene en su Nombre esas letras, más específicamente en el
segundo, cuarto, siete y doce carácter correspondientes solo al nombre.
9)
Funcionalidad Insertar datos a la bd
(Insertar Usuarios): Para guardar los datos al pulsar (BtnGuardar),
se
ejecutara a través de un objeto una clase de nombre Insertar(próxima
a crear), esta comunicará con el procedimiento almacenado InsertarUsuario creado en la bd y guardara los datos. Para crear la
clase, guíate del paso 5 para hacer lo siguiente:
·
Clic derecho sobre la carpeta MisClases
·
Agregar
·
Clase
·
Verificar que Archivo de código este seleccionado
·
Colocarle el nombre Insertar.cs
·
Clic en botón aceptar
Una
vez que se crea la clase, se abre automáticamente, copia y pega el siguiente
código el cual tiene su explicación.
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
// Biblitecas de
clases importadas por el programador
using
System.Data;// para operaciones con datos
using
MySql.Data;// para operacines con mysql
using
MySql.Data.MySqlClient;
using
System.Windows.Forms;
using Aplicacion.MisClases;
namespace Aplicacion.MisClases
{
class Insertar
{
Cadena
Obj = new Cadena();// declaramos los objeto de la clase cadena
public void InsertarUsu(string
Nombreprocedmiento, string ParametroBd1, string ParametroBd2, string
ParametroBd3, string TxtId, string TxtNombre, string
TxtApellido)
{
/*PARAMETROS
DE LA FUNCION INSERTARUSU
* Nombreprocedmiento: nombre del
procedimieto almacenado que tiene la sentencia del insert
* ParametroBd1: parametro 1 del
procedimiento almacenado InsertarUsuario corresponde al PID
* ParametroBd2: parametro 2 del
procedimiento almacenado InsertarUsuario corresponde al PNombre
* ParametroBd3: parametro 3 del
procedimiento almacenado InsertarUsuario corresponde al PApellido
* TxtId: parametro que recibe lo
que se escribe en el textbox id
* TxtNombre:parametro que recibe
lo que se escribe en el textbox nombre
* TxtApellido:parametro que recibe
lo que se escribe en el textbox apellido
*
Todos estos
parametros seran mandados a esta clase desde el formulario que tenga el boton
guardar
*/
string
CadenaApp;
CadenaApp = Obj.Obtenercadena();// le asigamos la cadena de conexion a la variable
CadenaApp
MySqlConnection conn = new MySqlConnection(CadenaApp);
DataTable odtable = new
DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter
odadapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new
MySqlCommand(Nombreprocedmiento, conn);
cmd.CommandType
= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("?"
+ ParametroBd1, TxtId);
cmd.Parameters["?" +
ParametroBd1].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("?" + ParametroBd2, TxtNombre);
cmd.Parameters["?" +
ParametroBd2].Direction = ParameterDirection.Input;
cmd.Parameters.AddWithValue("?"
+ ParametroBd3, TxtApellido);
cmd.Parameters["?" +
ParametroBd3].Direction = ParameterDirection.Input;
odadapter.SelectCommand = cmd;
cmd.ExecuteNonQuery();
//MessageBox .Show("Usuario Guardado Con
Exito!!",MessageBoxIcon.Information);
MessageBox.Show("Los
datos se han inserttado exitosamente ", "
SISVEUG SOFTWARE ", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
catch
(Exception ex)
{
MessageBox.Show(" No se pueden guardar los datos \n ERROR: "
+ ex.Message, "Aplicacion de ejemplo
", MessageBoxButtons.OK, MessageBoxIcon.Stop);
// MessageBox.Show("No se puedo guardar!! ","ejemplo
",MessageBoxButtons.OK,MessageBoxIcon.Information);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
En el caso de que se tenga otra tabla con tres campos esta
clase funcionara exitosamente solo hay que cambiarles los parametros a la hora
de llamar a la funcion.Una vez que esta clase este creada se guarda y se genera
el proyecto a ver si no hay errores, luego en el formulario doble clic en el
boton guardar
y pega el siguiente codigo en la parte de
arriba
Insertar InsertarRegistros = new Insertar();
Luego en el interior de la
funcion
InsertarRegistros.InsertarUsu("InsertarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
/*PARAMETROS DE
LA FUNCION
*
InsertarUsuario: nombre del procedimieto almacenado que tiene la sentencia del
insert
* Pid: parametro
1 del procedimiento almacenado InsertarUsuario
* PNombre:
parametro 2 del procedimiento almacenado InsertarUsuario
* PApellido:
parametro 3 del procedimiento almacenado InsertarUsuario
* TxtId: se
envia por parametro lo que esta escrito en el textbox del id
*
TxtNombre:envia que recibe lo que se escribe en el textbox nombre
*
TxtApellido:envia que recibe lo que se escribe en el textbox apellido
*/
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");// para que cuando se guarden los datos
// se
actualize el datagrid y se muestre es que se acaba de ingresar
Quedaria asi:
Insertar
InsertarRegistros = new Insertar();
private void GuardarBtn_Click(object
sender, EventArgs e)
{
InsertarRegistros.InsertarUsu("InsertarUsuario", "Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar]
}
Ejecuta el formulario con F5
10) Funcionalidad
Editar: Se quiere que dando clic derecho sobre el
registro se muestre un menú con la opción de editar el cual mandara los datos a
los textbox para poder cambiarlos y al pulsar el botón editar se actualizarán,
para esto se reutilizara una la de Insertar
previamente hecha, doble clic en el botón editar y escribe lo siguiente:
//ya no se
escibe Insertarusuario sino EditarUsuario
InsertarRegistros.InsertarUsu("EditarUsuario",
"Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
/*PARAMETROS DE
LA FUNCION
*
InsertarUsuario: nombre del procedimieto almacenado que tiene la sentencia del
EDITAR
* Pid: parametro
1 del procedimiento almacenado InsertarUsuario
* PNombre:
parametro 2 del procedimiento almacenado InsertarUsuario
* PApellido:
parametro 3 del procedimiento almacenado InsertarUsuario
* TxtId: se
envia por parametro lo que esta escrito en el textbox del id
*
TxtNombre:envia que recibe lo que se escribe en el textbox nombre
*
TxtApellido:envia que recibe lo que se escribe en el textbox apellido
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");// para que cuando se guarden los datos
// se
actualize el datagrid y se muestre lo que se acaba de ingresar
Código junto a la función clic del botón
// como ya el
objeto InsertarRegisto se creo en el paso anterior no es necesario volverlo a
crear, pero si por el contrario si se le quiere dar una clase especifica para
editar si hay que crear un objeto
private void BtnEditar_Click(object
sender, EventArgs e)
{
InsertarRegistros.InsertarUsu("EditarUsuario",
"Pid", "PNombre",
"PApellido", this.TxtId.Text, this.TxtNombre.Text,
this.TxtApellido.Text);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios,
"BuscarUsuario", "", "NombreABuscar");
}
Ahora solo falta que al darle clic sobre
cualquier registro se muestre un menú con la opción Editar, para esto realiza
los siguientes pasos:
· Selecciona el datagrid y en la propiedad selection mode escoge
FullRowSelect, para que al darle clic a una celda en especial se seleccione
toda la fila tal como se muestra en la imagen:
· Agrega el control
contextMenuStrip
, clic en él y escribir Editar y eliminar
·
Selecciona el datagrid y en la propiedad contextMenuStrip
escoge contextMenuStrip1 para que cuando se dé clic derecho salga el menú
anterior, es decir se le esta asignando el menú al datagrid.
· -> Selecciona contextMenuStrip
y doble en el menú editar y escribe lo siguiente
this.TxtId.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Id"].Value;//se
le asigna al texbox id el contenido de la celda ID del datagrid
this.TxtNombre.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value;//se
le asigna al texbox Nombre el contenido de la celda Nombre del datagrid
this.TxtApellido.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Apellido"].Value;//se le asigna al texbox Apellido el contenido de la celda
Apellido del datagrid
Código junto a la función
clic del menú editar
private void
editarToolStripMenuItem_Click(object sender, EventArgs e)
{
this.TxtId.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Id"].Value;//se le asigna al texbox id el contenido de la celda ID del
datagrid
this.TxtNombre.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value;//se le asigna al texbox Nombre el contenido de la celda
Nombre del datagrid
this.TxtApellido.Text=(string)DrgListaUsuarios.CurrentRow.Cells["Apellido"].Value;//se le asigna al texbox Apellido el contenido de la celda
Apellido del
datagrid
}
Nota: los campos
resaltados deber ser los mismos que se muestran en el datagrid, es decir tal
cual como se muestra al cargar el formulario
10)
Funcionalidad Eliminar: En
el paso anterior se agregó un contextMenuStrip el cual se asignó al datadrid y
se programó la opción Editar, ahora solo falta programar la función eliminar.
·
Agrega una nueva
clase en la carpeta MisClases de nombre Eliminar y pega el siguiente código:
using System;
using
System.Collections.Generic;
using
System.Linq;
using
System.Text;
using
System.Data;// para operaciones con datos
using
MySql.Data;// para operacines con mysql
using
MySql.Data.MySqlClient;
using
System.Windows.Forms;
using
Aplicacion.MisClases;
namespace
Aplicacion.MisClases
{
class Eliminar
{
Cadena Obj = new Cadena(); // objeto de la clase cadena
public void EliminarDatos(string
NombreprocedmientoBd, string ParametroBd, string valorEliminar)
{
string
CadenaApp;
CadenaApp = Obj.Obtenercadena();// le asigamos la cadena de conexion a la variable
CadenaApp
//
llamamos a la clase obtener cadena
// Int64 valor =
(Int64)datautor.CurrentRow.Cells["idautor"].Value;
String stm = NombreprocedmientoBd;
MySqlConnection conn = new
MySqlConnection(CadenaApp);
DataTable odtable = new
DataTable();
MySql.Data.MySqlClient.MySqlDataAdapter
odadapter = new MySql.Data.MySqlClient.MySqlDataAdapter();
try
{
if (conn.State != ConnectionState.Open)
conn.Open();
MySqlCommand cmd = new
MySqlCommand(stm, conn);
cmd.CommandType
= CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("?"
+ ParametroBd, valorEliminar);
cmd.Parameters["?" +
ParametroBd].Direction = ParameterDirection.Input;
odadapter.SelectCommand = cmd;
cmd.ExecuteNonQuery();
MessageBox.Show("Registro
Eliminado Con Exito!!", "Sistema
Vertical", MessageBoxButtons.OK,
MessageBoxIcon.Information);
// mostraraut(textBox1.Text);
}
catch (Exception
ex)
{
MessageBox.Show("No se puedo guardar!!" + ex.Message);
}
finally
{
if (conn.State != ConnectionState.Closed)
conn.Close();
conn.Dispose();
}
}
}
}
·
Doble clic sobre la opcion Eliminar del contextMenuStrip y
pega el siguiente código
string Id = Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Id"].Value);
string Nombre = Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value);
DialogResult dialog = MessageBox.Show("Esta
seguro que desea eliminar el este registro " + Id + " " + Nombre + "
No se podran deshacer los cambios", "Eliminar
Usuario", MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation);
if
(dialog == DialogResult.OK)
{
EliminarCliente.EliminarDatos("EliminarUsuario", "PId", Id);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario",
"", "NombreABuscar");
}
·
Código junto a su
función clic de menú eliminar
private void eliminarToolStripMenuItem_Click(object sender, EventArgs
e)
{
Eliminar
EliminarCliente = new Eliminar();// Objeto de la clase eliminar
string Id = Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Id"].Value);
string Nombre = Convert.ToString(DrgListaUsuarios.CurrentRow.Cells["Nombre"].Value);
DialogResult dialog = MessageBox.Show("Esta
seguro que desea eliminar el este registro " + Id + " " + Nombre + "
No se podran deshacer los cambios", "Eliminar
Usuario", MessageBoxButtons.OKCancel,
MessageBoxIcon.Exclamation);
if (dialog
== DialogResult.OK)
{
EliminarCliente.EliminarDatos("EliminarUsuario", "PId", Id);
MostrarUsuarios.MostrarDatos(DrgListaUsuarios, "BuscarUsuario",
"", "NombreABuscar");
}
}
No hay comentarios:
Publicar un comentario