2012-03-17 67 views
2

我拿到這個劇本,同時通過計算器如何使只讀到多個文本框

string commonTextBoxPrefix = "txt"; 
      foreach (Control c in this.Controls) 
      { 
       if (c.GetType() == typeof(TextBox) && 
        c.ID.StartsWith(commonTextBoxPrefix)) 
       { 
        ((TextBox)c).ReadOnly = true; 
       } 
      } 

搜索但當我循環通過其沒有檢測到任何其他控件的控件,它只能檢測{System.Web.UI.LiteralControl }所以循環沒有進入

if (c.GetType() == typeof(TextBox) 

爲什麼代碼沒有檢測到文本框和其他控件。 我嘗試下面的代碼也

foreach (Control c in parent.Controls) 
     { 
      if (c.Controls.Count > 0) 
      { 
       ClearControls(c); 
      } 
      else 
      { 
       switch (c.GetType().ToString()) 
       { 
        case "System.Web.UI.WebControls.TextBox": 
         ((TextBox)c).Text = ""; 
         break; 
        case "System.Web.UI.WebControls.CheckBox": 
         ((CheckBox)c).Checked = false; 
         break; 
        case "System.Web.UI.WebControls.RadioButton": 
         ((RadioButton)c).Checked = false; 
         break; 
        case "System.Web.UI.WebControls.DropDownList": 
         ((DropDownList)c).SelectedIndex = -1; 
         break; 
       } 
      } 
     } 

但環未讓在的條件。爲什麼循環沒有檢測到文本框?我怎樣才能將多個文本框設置爲只讀?

+1

這可能意味着子控件集合不包含文本框。 – Alex 2012-03-17 10:24:06

回答

4

對我的作品

<asp:Panel ID="Panel1" runat="server"> 
      <asp:TextBox ID="txt1" runat="server"></asp:TextBox> 
      <asp:TextBox ID="txt2" runat="server"></asp:TextBox> 
      <asp:TextBox ID="txt3" runat="server"></asp:TextBox> 
</asp:Panel> 

protected void Page_Load(object sender, EventArgs e) 
{ 
    ClearTextBoxes(Panel1); 
} 
protected void ClearTextBoxes(Control control) 
{ 
    foreach (Control c in control.Controls) 
    { 
     if (c is TextBox && c.ID.StartsWith("txt")) 
      ((TextBox)c).ReadOnly = true; 
    } 
} 

enter image description here

+1

很好的答案.. +1我:) – Jigs 2012-03-17 10:56:51

+0

'ClearTextBoxes(Panel1)'這節省了我解決問題的能力。但是我使用** igofed **的代碼。 謝謝 – itzArun 2012-03-17 11:13:36

3

可以有封裝到anothers一些控制。 所以這裏是做你想要recoursive方法:

void DoReadOnly(Control control) 
{ 
    foreach (Control c in control.Controls) 
    { 
     if (c.Controls != null && c.Controls.Count > 0) 
     { 
      DoReadOnly(c); 
     } 
     else if (c is TextBox) 
     { 
      (c as TextBox).ReadOnly = true; 
     } 
    } 
} 

你應該把它以這樣一種方式:

DoReadOnly(this.Form); 

希望它會幫助你。

+0

我試着給'DoReadOnly(tblQuarters)'而不是'DoReadOnly(this.form)'。循環進入tblQuarters表中的控件列表。 謝謝。 – itzArun 2012-03-17 11:10:16

+0

是的,這個.Form只是在頁面上的整個控件搜索。 – igofed 2012-03-17 12:55:27