domingo, 25 de abril de 2010

Cambiar leyenda de los CommandFields

Cuando agregamos un CommandField a nuestro GridView el Visual Studio nos pone las leyendas por omisión Delete, Edit, Update, Cancel (También depende del idioma que tengamos instalado en nuestra computadora).

Nosotros tenemos la opción de modificar esas leyendas para que aparezca lo que nosotros deseemos.

Por ejemplo, supongamos que en lugar de que diga Edit (Editar) aparezca la leyenda Modificar registro, para ello entraremos a la pantalla de Editar columnas del GridView y cambiar la propiedad EditText del CommandField.

De similar manera, para cambiar la leyenda que aparecerá en lugar de Update (Actualizar) y de Cancel (Cancelar) iremos a las propiedades UpdateText y CancelText, respectivamente.

Para cambiar la leyenda de nuestro CommandField Delete, iremos a la propiedad DeleteText y cambiaremos la leyenda, en nuestro caso, por Eliminar registro.

O si lo prefieren, también podremos cambiar la leyenda de los CommandField desde código.

VB NET
Private Sub TextCommandFields()
'Editar
Dim oEditColumn As CommandField = dgvListado.Columns(0)
oEditColumn.EditText = "Editar registro"
oEditColumn.CancelText = "Cancelar cambio"
oEditColumn.UpdateText = "Guardar cambio"

'Eliminar
Dim oDeleteColumn As CommandField = dgvListado.Columns(1)
oDeleteColumn.DeleteText = "Eliminar registro"
End Sub

C#
private void TextCommandFields()
{
//Editar
CommandField oEditColumn = (CommandField) dgvListado.Columns[0];
oEditColumn.EditText = "Editar registro";
oEditColumn.CancelText = "Cancelar cambio";
oEditColumn.UpdateText = "Guardar cambio";

//Eliminar
CommandField oDeleteColumn = (CommandField)dgvListado.Columns[1];
oDeleteColumn.DeleteText = "Eliminar registro";
}

Solo tendremos que llamar nuestra función desde el Page_Load de nuestra página.

ne...

Eliminando registros de un GridView utilizando un DataTable

Ahora solo nos falta ver como podemos eliminar registros de un GridView a partir de un DataTable.

Para ello, debemos agregar una columna tipo DELETE.

Al hacer esto, aparecerá una columna con la leyenda DELETE en nuestro GridView.

Ahora que tenemos nuestra columna DELETE, vamos a agregar el siguiente código para eliminar registros:

VB NET
Private Sub dgvListado_RowDeleting(...) Handles dgvListado.RowDeleting
'Lee el DataTable
Dim DT As DataTable = Session("DT")

'Elimina el registro
DT.Rows.RemoveAt(e.RowIndex)

'Actualiza los cambios
Session("DT") = DT

'Muestra los registros
Call Desplegar()
End Sub

C#
protected void dgvListado_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
//Lee el DataTable
DataTable DT = new DataTable();
DT = (DataTable)Session["DT"];

//Elimina el registro
DT.Rows.RemoveAt(e.RowIndex);

//Actualiza los cambios
Session["DT"] = DT;

//Muestra los registros
Desplegar();
}

Además, en nuestro GridView debemos agregar la siguiente línea:
OnRowDeleting="dgvListado_RowDeleting"

ne...

domingo, 11 de abril de 2010

Editando registros de un GridView utilizando un DataTable

Ahora lo que vamos a hacer es tener la posibilidad de editar los usuarios que vayamos agregando a nuestro catálogo.

La primera cosa que vamos a hacer es agregar una columna que nos permita editar los registros, para ello agregaremos un campo tipo Edit, Cancel, Update.

Una vez agregada, en la parte izquierda de nuestro listado nos aparecerá una columna con la leyenda Editar.

Para comenzar a editar nuestros registros necesitamos agregar el siguiente código.

VB.NET

Private Sub dgvListado_RowEditing(...) Handles dgvListado.RowEditing
'Le indicamos que fila es la que vamos a editar
dgvListado.EditIndex = e.NewEditIndex

'Desplegamos la información
Call Desplegar()
End Sub

Private Sub Desplegar()
'Leemos el dataTable
Dim DT As DataTable = Session("DT")

'Asignamos el DT al gridview
dgvListado.DataSource = DT
dgvListado.DataBind()
End Sub

C#

protected void dgvListado_RowEditing(object sender, GridViewEditEventArgs e)
{
//Le indicamos que fila es la que vamos a editar
dgvListado.EditIndex = e.NewEditIndex;

//Desplegamos la información
Desplegar();
}

private void Desplegar()
{
//Leemos el datatable
DataTable DT = new DataTable();
DT = (DataTable)Session["DT"];

//Asignamos el DT al GridView
dgvListado.DataSource = DT;
dgvListado.DataBind();
}

Además, para el caso de C# agregamos la siguiente línea en la sección Source de nuestra pantalla de diseño
OnRowEditing="dgvListado_RowEditing"

Este código lo único que nos va a hacer es prepararnos los registros para editar, aún nos falta agregar las sentencias necesarias para actualizar el registros.

Antes de llegar a este punto vamos a hacer un cambio, vamos a quitar la posibilidad de que puedan editar la clave del usuario, en otras palabras vamos a permitir que únicamente modifiquen el nombre y el teléfono de los usuarios.

A nuestro gridView le diremos que no permita modificar la clave de la siguiente manera:

DataKeyNames="Clave"

Entonces, al presionar el boton Editar nos aparecerán las opciones Actualizar y Cancelar además de habilitar los campos Nombre y Teléfono para editar nuestros registros.

Para actualizar nuestros registros, requerimos de las siguientes lineas:

VB.NET

Private Sub dgvListado_RowUpdating(...) Handles dgvListado.RowUpdating

'Leemos los datos ingresados
Dim strNombre As String = CType(dgvListado.Rows(e.RowIndex).Cells(2).Controls(0), TextBox).Text
Dim strTelefono As String = CType(dgvListado.Rows(e.RowIndex).Cells(3).Controls(0), TextBox).Text

'Actualizamos el DataTable
Dim DT As DataTable = Session("DT")
DT.Rows(e.RowIndex).Item("Nombre") = strNombre
DT.Rows(e.RowIndex).Item("Telefono") = strTelefono

'Le indicamos al grid que queremos eliminar la opcion de editar
dgvListado.EditIndex = -1

'Desplegamos la información
Call Desplegar()
End Sub

C#
protected void dgvListado_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
//Leemos los datos ingresados
string strNombre = ((TextBox) dgvListado.Rows[e.RowIndex].Cells[2].Controls[0]).Text;
string strTelefono=((TextBox) dgvListado.Rows[e.RowIndex].Cells[3].Controls[0]).Text;

//Actualizamos el DataTable
DataTable DT = new DataTable();
DT=(DataTable)Session["DT"];
DT.Rows[e.RowIndex]["Nombre"] = strNombre;
DT.Rows[e.RowIndex]["Telefono"] = strTelefono;

//Le indicamos al grid que queremos quitar la opción de editar
dgvListado.EditIndex = -1;

//Desplegamos la información
Desplegar();
}

Además, agregamos esta línea a nuestro GridView
OnRowUpdating="dgvListado_RowUpdating"

Por último, también requerimos del siguiente código para la opción de Cancelar.

VB.NET

Private Sub dgvListado_RowCancelingEdit(...) Handles dgvListado.RowCancelingEdit
'Le indicamos al grid que queremos eliminar la opcion de editar
dgvListado.EditIndex = -1

'Desplegamos la información
Call Desplegar()
End Sub

C#
protected void dgvListado_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
{
//Le indicamos al grid que queremos quitar la opción de editar
dgvListado.EditIndex = -1;

//Desplegamos la información
Desplegar();
}

Dudas ó comentarios son bienvenidos....

ne....

sábado, 10 de abril de 2010

Validar registros de un DataTable

Ahora lo que vamos a hacer es validar los usuarios que vayamos agregando para evitar tener dos usuarios con la misma clave.

Para hacer esto hay varios métodos pero voy a presentar la que me parece es la más fácil de implementar, vamos a utilizar el método Select con el que ya cuentan los DataTables, es decir, vamos a seleccionar los registros que contengan la clave que nosotros vayamos ingresando, si el DataTable nos devuelve registros eso nos indicará que la clave ya esta utilizada, de lo contrario nos dirá que nadie tiene esa clave.

Empecemos....

Veamos el siguiente ejemplo, estamos a punto de agregar un usuario con la clave 1, pero si revisan ya existe un usuario con la clave 1.
Entonces, con las siguientes líneas de código realizaremos la validación:

VB.NET

...

'Leemos el dataTable
Dim DT As DataTable = Session("DT")

'Revisamos si ya existe el usuario
Dim DR() As DataRow
DR = DT.Select("Clave = " & strClave)
If DR.Length > 0 Then
'Ya existe el registro
lblMensaje.Text = "Ya existe un usuario registrado con esa clave"
lblMensaje.Visible = True
Exit Sub
Else
lblMensaje.Text = ""
lblMensaje.Visible = False
End If

'Insertamos el registro
DT.Rows.Add(strClave, strNombre, strTelefono)
...

C#

...
//Leemos el datatable
DataTable DT = new DataTable();
DT = (DataTable) Session["DT"];

//Revisamos si existe el usuario
DataRow[] DR;
DR=DT.Select("Clave=" + strClave );
if (DR.Length > 0)
{
lblMensaje.Text = "Ya existe un usuario registrado con esa clave";
lblMensaje.Visible = true;
return;
}
else
{
lblMensaje.Text = "";
lblMensaje.Visible = false;
}

//Insertamos el registro
DT.Rows.Add(strClave,strNombre,strTelefono);
...

NOTA: El resto del código aparece en la entrada anterior.

Entonces, al intentar agregar al usuario el sistema nos desplegará un mensaje indicando que ya existe un usuario con esa clave

Y con esto terminamos.

ne...

domingo, 4 de abril de 2010

Agregar registros a un GridView utilizando un DataTable

Lo que pretendemos lograr es poder agregar registros a un GridView utilizando un DataTable que contenga toda la información que queremos mostrar.

Vamos a utilizar tres cajas de texto, uno para ingresar la clave del usuario, uno para ingresar el nombre del usuario y por último uno para ingresar el teléfono del usuario.

Utilizaremos un botón para agregar el registro y un GridView donde mostraremos los usuarios que vayamos agregando.

Lo primero que debemos hacer es crear el DataTable donde guardaremos la información, haremos la declaración del DataTable en el Page_Load de la página.

VB NET

Protected Sub Page_Load(...) Handles Me.Load

'Revisamos que no sea un refresh
If Not IsPostBack Then

'Creamos el DataTable
Dim DT As New DataTable
DT.Columns.Add("Clave", Type.GetType("System.String"))
DT.Columns.Add("Nombre", Type.GetType("System.String"))
DT.Columns.Add("Telefono", Type.GetType("System.String"))

'Guardamos la información en una variable de sesión
Session("DT") = DT

'Asignamos el DT al gridview (en este momento el DT está vacio)
dgvListado.DataSource = DT
dgvListado.DataBind()

End If
End Sub

C#

protected void Page_Load(object sender, EventArgs e)
{
//Revisamos que no sea un refresh
if (!IsPostBack)
{

//Creamos el dataTable
DataTable DT = new DataTable();
DT.Columns.Add("Clave", Type.GetType("System.String"));
DT.Columns.Add("Nombre", Type.GetType("System.String"));
DT.Columns.Add("Telefono", Type.GetType("System.String"));

//Guardamos la información en una variable de sesión
Session["DT"] = DT;

//Asignamos el DT al gridview (en este momento el DT esta vacio
dgvListado.DataSource = DT;
dgvListado.DataBind();

}
}

Y en el evento Click del boton de Agregar pondremos la rutina que agregará el registro al DataTable que posteriormente se mostrará en el GridView.

VB NET

Protected Sub btnAgregar_Click(...) Handles btnAgregar.Click

'Leemos la información
Dim strClave As String = txtClave.Text.Trim
Dim strNombre As String = txtNombre.Text.Trim
Dim strTelefono As String = txtTelefono.Text.Trim
'Leemos el dataTable
Dim DT As DataTable = Session("DT")

'Insertamos el registro
DT.Rows.Add(strClave, strNombre, strTelefono)

'Asignamos el DT al gridview
dgvListado.DataSource = DT
dgvListado.DataBind()

'Actualizamos el DataTable en la variable de session
Session("DT") = DT

'Limpiamos la pantalla
txtClave.Text = ""
txtNombre.Text = ""
txtTelefono.Text = ""
End Sub

C#

protected void btnAgregar_Click(object sender, EventArgs e)
{
//Leemos la información
string strClave = txtClave.Text;
string strNombre = txtNombre.Text;
string strTelefono = txtTelefono.Text;

//Leemos el datatable
DataTable DT = new DataTable();
DT = (DataTable) Session["DT"];
//Insertamos el registro
DT.Rows.Add(strClave,strNombre,strTelefono);
//Asignamos del DT al gridview
dgvListado.DataSource=DT;
dgvListado.DataBind();

//Actualizamos el DT de la variable de sessión
Session["DT"]=DT;

//Limpiamos la pantalla
txtClave.Text="";
txtNombre.Text="";
txtTelefono.Text="";

}
}