2017-07-19 125 views
0

我意識到有類似的問題可以通過ID引用和.FindControl(ID)解決,但該解決方案不適用於我,因爲我正在進行迭代設置。無法將類型爲「System.Web.UI.LiteralControl」的對象轉換爲鍵入「System.Web.UI.WebControls.RequiredFieldValidator」。

情況是這樣的。我有一個4列表。其中一個是隱藏的,只能根據日期顯示。爲了顯示列,我遍歷表格和單元格使其可見。如果列顯示,此過程還需要激活每個單元格所需的RequiredFieldValidator。下面是在.aspx

<asp:TableCell runat="server" visible="false"> 
<div class="pull-right form-group form-inline"> 
<asp:Label ID="Label28" CssClass="control-label" runat="server" Text="Sales Actual:"></asp:Label> 
<asp:TextBox ID="txtStationarySalesFull" runat="server" CssClass="form-control input-sm form-control-inline-small"></asp:TextBox> 
<asp:RequiredFieldValidator ID="RequiredFieldValidator38" Display="Dynamic" CssClass="help-block" runat="server" ErrorMessage="" ValidationGroup="Form" ControlToValidate="txtStationarySalesFull" Enabled="false"></asp:RequiredFieldValidator> 
</div> 
</asp:TableCell> 

樣品池要做到這一點,我想:

foreach (TableRow row in tblGoals.Rows) 
     { 
      foreach (TableCell cell in row.Cells) 
      { 
       cell.Visible = true; 

       foreach (RequiredFieldValidator fv in cell.Controls) 
       { 
        fv.Enabled = true; 
       } 
      } 

     } 

這不工作,雖然。它會發現控件集合正常,但是返回的5個控件中沒有RequiredFieldValidators,並且它失敗了:

無法將類型爲'System.Web.UI.LiteralControl'的對象轉換爲鍵入'System .Web.UI.WebControls.RequiredFieldValidator」。

控件集合包含兩個LiteralControls,一個TextBox和兩個Text值。奇怪的是,第二個文本=「」實際上是我期待的requiredfieldvalidator。

任何想法,我如何能夠實際做出這項工作?我寧願避免通過ID來引用每個控件,因爲這通常是要重用的代碼。

我能想到的,涉及

foreach (TableCell cell in row.Cells) 
      { 
       cell.Visible = true; 
       if (cell.Controls.Count > 4) { 
        RequiredFieldValidator fv = (RequiredFieldValidator)cell.Controls[3]; 
        fv.Enabled = true; 
       } 

      } 

混亂的版本,但是,沒有捕捉到所有的情況。有一些單元的控制器數量較少,需要啓用驗證器。

+3

'細胞的唯一控制。 Controls.OfType ' – Will

+0

天啊!我的大腦真的不能今天工作!!!!!!!謝謝 –

+0

'cell.Controls.OfType'不起作用,會嗎?您必須解決單元內部div內的控件。對? – AgapwIesu

回答

0

繼@ WILL的回答,你的循環可能會變成這個樣子:

foreach (TableRow row in tblGoals.Rows) 
     { 
      foreach (TableCell cell in row.Cells) 
      { 
       cell.Visible = true; 

       foreach (RequiredFieldValidator fv in cell.Controls.OfType<RequiredFieldValidator>) 
       { 
        fv.Enabled = true; 
       } 
      } 

     } 

在第三foreach循環,你必須過濾器類型RequiredFieldValidator

+0

這正是我改變它:) –

相關問題