Desarrollando con ASP .Net, muchas veces he tenido la necesidad de agregar nuevos registros directamente en un GridView y claro, buscando un poco en internet podemos encontrar temas al respecto; aún así, no había encontrado una forma mas o menos humana de agregar datos directamente en el GridView cuando no hay registros que mostrar. Para ser más claros, si queremos agregar datos directamente sobre el GridView bastaría con personalizar el FooterRow de mi GridView para conseguirlo, pero si el GridView está vacio no se puede visualizar ni siquiera el FooterRow, de manera que agregar registros directamente sobre el GridView ya no es posible.

En este artículo les voy a proponer una forma de agregar registros directamente sobre el GridView así éste se encuentre sin registros. Este ejemplo es bastante simple y solo utilizaré dos campos: Nombre y Apellido, ya luego Uds. pueden modificarlo, mejorarlo y adaptarlo a sus necesidades. Como siempre, pueden descargar el código completo, al final del artículo.

El resultado debe ser mas o menos como se muestra en la siguiente imágen:

Ejemplo Agregar Filas a GridView

Para conseguir esto se deben realizar los siguientes pasos:

Primero, crear una clase base llamada llamada (en este caso) Registro que contendrá 3 propiedades: Nombre, Apellido y una “especial” llamada InitialSender de tipo object, está última aunque no es necesaria, se utilizará para contener al objeto que inicia el evento de adicionar registros la primera vez.

Segundo, crear un Control Web con dos TextBox y un ImageButton, para que quede como se muestra en la imágen anterior con el número 1. Este control además, tendrá un evento creado con el delegado genérico EventHandler<TEventArgs> de nombre Agregar.Al hacer clic en el ImageButton se instanciará un objeto de la clase Registro y asignaremos los valores para sus propiedades; el constructor de esta clase recibe como parámetro el objeto ImageButton que inició el evento; luego de ello, se invocará al evento Agregar del control web que hemos creado pasándole como parámetros la instancia del objeto registro creada y los argumentos iniciales. mas o menos como se muestra en el siguiente ejemplo:

public partial class AgregarRegistro : System.Web.UI.UserControl
{
public event EventHandler<ImageClickEventArgs> Agregar;

protected void ibtAgregar_Click(object sender, ImageClickEventArgs e)
{
Registro reg = new Registro(sender);

reg.Nombre = txtNombre.Text;
reg.Apellidos = txtApellidos.Text;

Agregar(reg, e);
}
}

Tercero; una vez hecho los pasos anteriores en la página web aspx que utilizaré para agregar mis datos agregaré un GridView y lo diseñaré como se muestra en la siguiente imágen:

Código para Agregar Filas en un GridView

Nótese que aquí la propiedad ShowFooter de la grilla esta en True y que cada columna es un ItemTemplate, lo cual me permite personalizar además, el pie de página. La etiqueta <EmptyDataTemplate> se utiliza para agregar un contenido que se visualizará cuando no hayan registros en el GridView, de manera que será allí donde yo agregue mi control web creado. Nótese también que el evento OnAgregar de mi control invoca al mismo método que el ImageButton del pie de mi GridView, con ello me aseguro de escribir un solo método para ambos casos.

Pues básicamente eso es todo lo necesario, para poder efectuar esta operación, claro, de hecho que en cada caso se necesitará un nivel de personalización mayor pero al menos ya se tiene una alternativa que puede ser de ayuda si se les presenta este caso.

Descargar ejemplo Insertar registros en GridView.

Espero que les sea de utilidad.