2017-07-19 150 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

这正是我改变它:) –

相关问题