2010-11-25 28 views

Répondre

0

ici la solution:

Vous devez parcourir tous les contrôles et vérifier qu'ils disposent eux-mêmes de contrôles. Donc vous faites ceci récursif:

public void ResetForm(ControlCollection objSiteControls) 
    { 
     foreach (Control objCurrControl in objSiteControls) 
     { 
      string strCurrControlName = objCurrControl.GetType().Name; 

      if (objCurrControl.HasControls()) 
      { 
       ResetForm(objCurrControl.Controls); 
      } 

      switch (strCurrControlName) 
      { 
       case "TextBox": 
        TextBox objTextBoxControl = (TextBox)objCurrControl; 
        objTextBoxControl.Text = string.Empty; 
        break; 
       case "DropDownList": 
        DropDownList objDropDownControl = (DropDownList)objCurrControl; 
        objDropDownControl.SelectedIndex = -1; 
        break; 
       case "GridView": 
        GridView objGridViewControl = (GridView)objCurrControl; 
        objGridViewControl.SelectedIndex = -1; 
        break; 
       case "CheckBox": 
        CheckBox objCheckBoxControl = (CheckBox)objCurrControl; 
        objCheckBoxControl.Checked = false; 
        break; 
       case "CheckBoxList": 
        CheckBoxList objCheckBoxListControl = (CheckBoxList)objCurrControl; 
        objCheckBoxListControl.ClearSelection(); 
        break;      
       case "RadioButtonList": 
        RadioButtonList objRadioButtonList = (RadioButtonList)objCurrControl; 
        objRadioButtonList.ClearSelection(); 
        break; 

      } 
     } 
    } 
2

Le ContentPlaceHolder dans la page maître lui-même contient toutes les commandes de la page, vous pouvez donc y accéder en utilisant:

var button = ContentPlaceHolder1.FindControls("btnSubmit") as Button; 

Gardez à l'esprit que le code sera en cours d'exécution pour toutes les pages qui héritent de cette page maître , donc si l'un d'eux ne contient pas "btnSubmit" (dans l'exemple ci-dessus), vous obtiendrez null.

+1

Ouais mieux vérifier si c'est nul avant de l'utiliser. – Rushino

1

par l'utilisation de la page principale vous ne pouvez pas accéder à un contrôle en utilisant la fonction FindControl() parce que la page est dans ContentPlaceHolder de masterpage, afin que vous puissiez accéder à tout contrôle par l'utilisation de la récursivité comme:

protected void Button1_Click(object sender, EventArgs e) 
    { 
     ReSetToDefault(); 
    } 

    private void ReSetToDefault() 
    { 
     ResetControl(this.Page.Controls); 
    } 

    private void ResetControl(ControlCollection controlCollection) 
    { 
     foreach (Control con in controlCollection) 
     { 
      if (con.Controls.Count > 0) 
       ResetControl(con.Controls); 
      else 
      { 
       switch (con.GetType().ToString()) 
       { 
        case "System.Web.UI.WebControls.TextBox": 
         { 
          TextBox txt = con as TextBox; 
          txt.Text = "default value"; 
         } 
         break; 
        case "System.Web.UI.WebControls.CheckBox" 
         { 
         } 
         break; 
       } 
      } 
     } 
    }