En este mini-post les presento una forma en la que podemos implementar un método que limpie todos los controles de una página ASP.NET.

Si existen muchos controles en la página entre ellos TextBox, DropDownList, CheckBox, RadioButtons, RadioButtonsList CheckBoxList y además los controles por ejemplo forman parte de un contenedor Principal como un control Panel es decir que a un simple recorrido estos no son accesibles podemos hacer lo siguiente.

Tenemos el siguiente Form de ASPX

 <form id="form1" runat="server">
    <div>
        <table>
            <tr>
                <td>Nombre</td>
                <td><asp:TextBox ID="TxtName" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                <td>Pais</td>
                <td>
                    <asp:DropDownList ID="DdlPais" runat="server">
                        <asp:ListItem Text="--Seleccione--" Value="0" />
                        <asp:ListItem Text="Colombia" Value="1" />
                        <asp:ListItem Text="México" Value="2" />
                        <asp:ListItem Text="Brazil" Value="3" />
                        <asp:ListItem Text="USA" Value="4" />
                    </asp:DropDownList>
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    <asp:RadioButtonList ID="RblSexo" runat="server">
                        <asp:ListItem Text="M" Value="0" />
                        <asp:ListItem Text="F" Value="1" />
                    </asp:RadioButtonList>
                </td>
            </tr>
            <tr>
                <td>Programador</td>
                <td>
                    <asp:Panel ID="PnProg"  runat="server">
                        <table>
                            <tr>
                                <td>Nivel</td>
                                <td>   
                                    <asp:CheckBoxList ID="ChkLNivel"  runat="server">
                                        <asp:ListItem Text="Alto"></asp:ListItem>
                                        <asp:ListItem Text="Medio"></asp:ListItem>
                                        <asp:ListItem Text="Bajo"></asp:ListItem>
                                    </asp:CheckBoxList>
                                </td>
                            </tr>
                            <tr>
                                <td>Lenguajes</td>
                                <td>
                                    <asp:RadioButton ID="RbCSharp" Text="C#" runat="server" />
                                    <asp:RadioButton ID="RbVBasic" Text="VB" runat="server" />
                                    <asp:RadioButton ID="RbJScript" Text="JScript" runat="server" />
                                    <asp:RadioButton ID="RbCDPlus" Text="C++" runat="server" />
                                </td>
                            </tr>
                            <tr>
                                <td>No me interesa</td>
                                <td><asp:CheckBox ID="ChkNoInt" runat="server" /></td>
                            </tr>
                        </table>
                    </asp:Panel>
                </td>
            </tr>
        </table>
    </div>
    <asp:Button ID="BtLimpiar" runat="server" Text="Limpiar Controles" 
        onclick="BtLimpiar_Click" />
    </form>

Y tenemos el siguiente Formulario con los controles con algún tipo de valor

Ahora en el code-behind procedemos a limpiarlos:

C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DemoASP
{
    public partial class CleanControlsSample : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {

        }
        //Función que permite limpiar todos los controles de una página Web
        //recursivamente. Útil cuando en la página existen varios controles
        //evita tener que limpiar uno por uno. 
        public void CleanControl(ControlCollection controles)
        {
            foreach (Control control in controles)
            {
                if (control is TextBox)
                    ((TextBox)control).Text = string.Empty;
                else if (control is DropDownList)
                    ((DropDownList)control).ClearSelection();
                else if (control is RadioButtonList)
                    ((RadioButtonList)control).ClearSelection();
                else if (control is CheckBoxList)
                    ((CheckBoxList)control).ClearSelection();
                else if (control is RadioButton)
                    ((RadioButton)control).Checked = false;
                else if (control is CheckBox)
                    ((CheckBox)control).Checked = false;
                else if (control.HasControls())
                    //Esta linea detécta un Control que contenga otros Controles
                    //Así ningún control se quedará sin ser limpiado.
                    CleanControl(control.Controls);
            }
        }
        //Evento del control Button Limpiar controles de la página ASPX
        protected void BtLimpiar_Click(object sender, EventArgs e)
        {
            //Cuando se llama el método limpiar se pasa como parámetro 
            //la colección de controles de la página Web.
            CleanControl(this.Controls);
        }
    }
}

VB

Public Class CleanControls
    Inherits System.Web.UI.Page

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    End Sub

    ''Evento del control Button Limpiar controles de la página ASPX
    Protected Sub BtLimpiar_Click(ByVal sender As Object, ByVal e As EventArgs) Handles BtLimpiar.Click
         ''Cuando se llama el método limpiar se pasa como parámetro 
         ''la colección de controles de la página Web.
        CleanControls(Me.Controls)
    End Sub
   ''Función que permite limpiar todos los controles de una página Web
   ''recursivamente. Útil cuando en la página existen varios controles
   ''evita tener que limpiar uno por uno. 
    Public Sub CleanControls(ByVal controles As ControlCollection)
        For Each control As Control In controles
            If TypeOf control Is TextBox Then
                DirectCast(control, TextBox).Text = String.Empty
            ElseIf TypeOf control Is DropDownList Then
                DirectCast(control, DropDownList).ClearSelection()
            ElseIf TypeOf control Is RadioButtonList Then
                DirectCast(control, RadioButtonList).ClearSelection()
            ElseIf TypeOf control Is CheckBoxList Then
                DirectCast(control, CheckBoxList).ClearSelection()
            ElseIf TypeOf control Is RadioButton Then
                DirectCast(control, RadioButton).Checked = False
            ElseIf TypeOf control Is CheckBox Then
                DirectCast(control, CheckBox).Checked = False
            ElseIf control.HasControls() Then
                CleanControls(control.Controls)
            End If
        Next
    End Sub

End Class

Así lucirá el WebForm luego de limpiar los controles.

Anuncios