无法强制转换类型为'System.Web.UI.WebControls.Label'键入'Sys

本文关键字:UI Web WebControls Label Sys 键入 System 类型 转换 | 更新日期: 2023-09-27 17:49:01

我的aspx页面是这样的:

<asp:TemplateField HeaderText="Detail" HeaderStyle-ForeColor="DimGray" >
  <ItemTemplate>
    <asp:Label ID="labeldetail" runat="server" Text='Label' ></asp:Label>
  </ItemTemplate>
</asp:TemplateField>

在aspx.cs中,向grid添加值:

 public void Addtogrid()
 {
    string ctrlStr = String.Empty;
    foreach (string ctl in Page.Request.Form)
    {  
       if (ctl.Contains("Longitude"))
       {
          ctrlStr = ctl.ToString();
          Disctrict.School[0].Student[j].Activity[k].Sport = Request.Form[ctrlStr];
       }
    }
 }
 protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
 {
   if (e.Row.RowType == DataControlRowType.DataRow)
   {
     Label lbl7 = (Label)e.Row.FindControl("labeldetail");
     if (lbl7 != null)
     {
       lbl7.Text =  Disctrict.School[0].Student[j].Activity[[e.Row.RowIndex].Sport ;
     }
   }
 }
 protected void GridView1_RowCommand(object sender, GridViewCommandEventArgs e)
 {
    foreach (Control ctrl in ControlsPanel.Controls)
    {
      if (ctrl.ClientID.Contains("Sport"))
      {
        ((TextBox)ctrl).Text = Disctrict.School[0].Student[0].Activity[x].Sport // <--- Getting error here....
      }
    }
 }
我不明白我错过了什么。我在同一个GridView中还有其他16个项目,一切都很好。

无法强制转换类型为'System.Web.UI.WebControls.Label'键入'Sys

看起来您正在迭代的ControlsPanel中包含的控件之一不是TextBox类型。根据你的错误,它似乎是Label类型。

您可以在尝试强制转换之前检查类型,如下所示:

if (ctrl is TextBox)
{
   ((TextBox)ctrl).Text = Disctrict.School[0].Student[0].Activity[x].Sport
}
else
{
   // you can do something else, or ignore the control if it is not a text box
}

一般来说,除非你确定对象是你要强制转换的类型,否则在尝试这样的强制转换之前测试类型是一个很好的做法。

我发现有时有用的方法是as关键字来尝试转换对象,然后比较null。如果对象没有实现该接口,或者不能将变量强制转换为您试图将其强制转换为的类型,那么这样做将导致变量被设置为null。

TextBox txtBox = ctrl as TextBox;   
// now txtBox will either be set to an instance or will be null
if (txtBox != null)
{
    // this means the cast worked..
}
请注意,as关键字可能比显式强制转换慢,因此请始终考虑强制转换执行的频率和在什么情况下执行!

正如错误所说:您正在尝试将标签转换为文本框,将其更改为:

TextBox txt = (ctrl as TextBox);
if ((ctrl as TextBox) != null)
    (ctrl as TextBox).Text = Disctrict.School[0].Student[0].Activity[x].Sport;
else if ((ctrl as Label) != null)
    (ctrl as Label).Text = Disctrict.School[0].Student[0].Activity[x].Sport;
相关文章: