lunes, 28 de marzo de 2011

Editar todas las filas de un GridView a la vez.

Por default, en los controles GridView se edita una fila a la vez, para lo cual hay que agregar en cada fila un boton de edición. Pero habrá ocaciones en que, por la cantidad de información que se maneja en un grid y, por el proceso de captura en si, resulta inconveniente entrar registro por registro a modificarlo. Para estos casos, se puede implementar la edición masiva de filas de un GridView, he aquí el ejemplo de cómo hacer esto:

1.- En nuestro formulario aspx, se manejaran 2 controles, uno de tipo TextBox y otro Label, el primero es para editar y el segundo para visualizar la calificacion. El despliegue en pantalla de ambos controles debera estar controlado por lo que puede ser una variable de tipo bool, la cual indicará si su atributo "Visible" es true o false. El código del Gridview quedaría asi:
<asp:GridView ID="GridView1" runat="server" DataKeyNames="idcalificacion" >
            <Columns>
            <asp:BoundField DataField="idcalificacion" HeaderText="ID CALIFICACION" />
            <asp:BoundField DataField="alumno" HeaderText="ALUMNO" />
            <asp:TemplateField HeaderText="CALIFICACION">
                <ItemTemplate>                           
                    <asp:TextBox ID="TextBoxCalificacion" Visible='<%# (bool) IsInEditMode %>' runat="server" Width="30" MaxLength="2" Text='<%# Bind("calificacion") %>'></asp:TextBox>
                    <asp:Label ID="Label1" runat="server" Visible='<%# !(bool) IsInEditMode %>' Text='<%# Bind("calificacion") %>'></asp:Label>
                </ItemTemplate>
            </asp:TemplateField>                       
        </Columns>
    </asp:GridView>

En el archivo de codigo .CS, el valor de la variable bool que condiciona la visibilidad de los controles seria puesto o devuelto por la siguiente funcion:

    protected bool IsInEditMode
    {
        get { return isEditMode; }
        set { isEditMode = value; }
    }

Y el evento que modificaria el valor de esa variable, podria ser el click a un boton llamado EDITAR/GUARDAR, el cual queda de la siguiente manera:

    protected void editar_Click(object sender, EventArgs e)
    {
        if (isEditMode == false)
        {
            isEditMode = true;
        }
        else
        {
            isEditMode = false;
         }
   }

En resumen:
Inicialmente la variable isEditMode estaria en false, al dar click en el boton EDITAR/GUARDAR, esa variable invertirá su valor de false a true y viceversa, lo que llevará a visualizar o no el control TextBox o el control Label  de cada fila del GridView, todas las filas al mismo tiempo ya que todas condicionan la visibilidad de sus controles a través de la misma variable.

Espero que les haya sido de ayuda estos códigos de ejemplos. Cualquier duda, escríbanme.

3 comentarios:

  1. pero solo funciona para una sola columna?? como hago siquiero que todas las columnas y filas sean editables?

    ResponderEliminar
  2. En el ejemplo hay una columna editable llamada CALIFICACION:







    Si deseas tener más columnas editables debes agregar el mismo código para cada columna extra que necesites.

    ResponderEliminar