无法强制转换类型为'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个项目,一切都很好。
看起来您正在迭代的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;