当前位置: 代码迷 >> 综合 >> ASP.net 无法将类型为“System.Web.UI.HtmlControls.HtmlTableCell”的对象强制转换为类型
  详细解决方案

ASP.net 无法将类型为“System.Web.UI.HtmlControls.HtmlTableCell”的对象强制转换为类型

热度:7   发布时间:2024-01-28 19:08:58.0

最近想学习ASP.net,可是一上来就遇到问题:

System.InvalidCastException
HResult=0x80004002
Message=无法将类型为“System.Web.UI.HtmlControls.HtmlTableCell”的对象强制转换为类型“System.Web.UI.WebControls.Label”。
Source=<无法计算异常源>
StackTrace:
<无法计算异常堆栈跟踪>

我在listview控件中想要通过删除按钮通过ID来删除一行数据;前端代码如下

<asp:ListView ID="D_list" runat="server"
OnItemEditing="D_list_ItemEditing"
OnItemCanceling="D_list_ItemCanceling"
OnItemDeleting="D_list_ItemDeleting">
<LayoutTemplate runat="server">
<table cellpadding="2" width="100%" border="1" id="Employeelist" runat="server">
<tr runat="server" style="background-color: #98FB98">
<th runat="server">ID</th>
<th runat="server">名字</th>
<th runat="server">电话</th>
<th runat="server">地址</th>
<th runat="server">操作</th>
</tr>
<tr runat="server" id="itemPlaceholder" />
</table>
</LayoutTemplate>
<ItemTemplate>
<tr runat="server">
<td id="ID"><%#Eval("ID")%></td>
<td id="UNAME"><%#Eval("UNAME")%></td>
<td><%#Eval("Utel")%></td>
<td><%#Eval("UADDR")%></td>
<td>
<asp:Button ID="EditButton" runat="server" Text="编辑" CommandName="EDit" CommandArgument='<%#Eval("ID") %>' />
<asp:Button ID="DeleteButton" runat="server" Text="删除" CommandName="Delete" CommandArgument='<%#Eval("ID") %>' OnCommand="DeleteButton_Command" />
</td>
</tr>
</ItemTemplate>
<EditItemTemplate runat="server">
<tr runat="server" class="EditItem">
<td>
<b>ID:</b><br />
<asp:Label ID="IDLabel" runat="server" Text='<%#Eval("ID") %>' Enabled="false" />
</td>
<td runat="server">
<asp:Label runat="server" ID="NameLabel" Text="名字" Font-Bold="true" /><br />
<asp:TextBox ID="UNAMETextBox" runat="server" Text='<%#Bind("UNAME") %>' />
</td>
<td runat="server">
<asp:Label runat="server" ID="Utel" AssociatedControlID="Utel" Text="电话" Font-Bold="true" /><br />
<asp:TextBox ID="UtelTextBox" runat="server" Width="200px" Text='<%#Bind("Utel") %>' />
<br />
</td>
<td runat="server">
<asp:Label runat="server" ID="UADDR" AssociatedControlID="UADDR" Text="地址" Font-Bold="true" /><br />
<asp:TextBox ID="UADDRTextBox" runat="server" Width="200px" Text='<%#Bind("UADDR") %>' />
<br />
</td>
<td runat="server">
<asp:Button ID="EditButton" runat="server" Text="更新" CommandName="Edit" CommandArgument='<%#Eval("ID") %>' />
<asp:Button ID="CancelButton" runat="server" Text="取消" CommandName="Delete" CommandArgument='<%#Eval("ID") %>' />
</td>
</tr>
</EditItemTemplate>
</asp:ListView>

后台代码如下:


protected void D_list_ItemDeleting(object sender, ListViewDeleteEventArgs e)
{

        foreach (var item in D_list.Items)
{

            if (item.ItemType==ListViewItemType.DataItem)
{
Label lb=(Label)item.FindControl("ID");//item.FindControl("ID").ID;//执行到这一句时报错
}

}

}

网上查了很多资料,有的说是标签中要去掉空格,有的说是后台代码写得有错误;反正找了两天没解决问题;最后我在官方找到了答案https://docs.microsoft.com/zh-cn/dotnet/api/system.web.ui.webcontrols.listviewitem?view=netframework-4.8

每列数据要想转换为label 类型 必须使用<asp:Label>标签才能转换,不能使用<label>标签,技术比较简单,对于初学者很有用。

希望大家努力学习;

  相关解决方案