C# 类型'的例外情况;System.InvalidCastException';,无法强制转换类型为';MS.Internal.NamedObject';输入';System.Data.DataRowView';
前端代码:C# 类型'的例外情况;System.InvalidCastException';,无法强制转换类型为';MS.Internal.NamedObject';输入';System.Data.DataRowView';,c#,wpf,C#,Wpf,前端代码: <ListView Name="lvCus" MouseDoubleClick="ListViewItem_DoubleClick"> <ListView.View> <GridView AllowsColumnReorder="true" ColumnHeaderToolTip="TbCus"> <GridView
<ListView Name="lvCus" MouseDoubleClick="ListViewItem_DoubleClick">
<ListView.View>
<GridView AllowsColumnReorder="true" ColumnHeaderToolTip="TbCus">
<GridViewColumn Header="CusID" Width="40" DisplayMemberBinding="{Binding Path=CusID}" />
<GridViewColumn Header="Firstname" Width="120" DisplayMemberBinding="{Binding Path=fn}" />
<GridViewColumn Header="Lastname" Width="120" DisplayMemberBinding="{Binding Path=ln}" />
<GridViewColumn Header="Dob" Width="100" DisplayMemberBinding="{Binding Path=dob}" />
<GridViewColumn Header="Age" Width="60" DisplayMemberBinding="{Binding Path=age}" />
</GridView>
</ListView.View>
</ListView>
ListView加载了数据,它的末尾似乎有一个空行。单击ListView的空行时,出现以下错误:
WpfApp.exe中发生了类型为“System.InvalidCastException”的第一次意外异常
其他信息:无法将“MS.Internal.NamedObject”类型的对象强制转换为“System.Data.DataRowView”类型
如果存在此异常的处理程序,则程序可以安全地继续
我犯了上述错误,如何解决?伙计们,我正处于学习阶段。您应该使用as运算符确保SelectedItem属性实际返回System.Data.DataRowView,以避免在用户双击最后一行时出现异常:
private void ListViewItem_DoubleClick(object sender, RoutedEventArgs e)
{
System.Data.DataRowView cusObj = lvCus.SelectedItem as System.Data.DataRowView;
if (cusObj != null)
{
var myobj = cusObj.Row.ItemArray;
txtCusID.Text = myobj[0].ToString();
txtfn.Text = myobj[1].ToString();
txtln.Text = myobj[2].ToString();
txtdob.Text = myobj[3].ToString();
txtage.Text = myobj[4].ToString();
}
}
您不能将空支票添加到所选项目吗?这可能是因为试图对空项进行强制转换。你的问题是什么?@Tim:我当然想找到一些解决方案来消除错误,这就是为什么发布错误的原因。@PrageethSaravanan:我在空检查之前遇到异常。你能给我举个例子吗?谢谢你的回答。我现在有了新的例外。WpfApp.exe中发生类型为“System.NullReferenceException”的未处理异常。其他信息:对象引用未设置为对象的实例。
private void ListViewItem_DoubleClick(object sender, RoutedEventArgs e)
{
System.Data.DataRowView cusObj = lvCus.SelectedItem as System.Data.DataRowView;
if (cusObj != null)
{
var myobj = cusObj.Row.ItemArray;
txtCusID.Text = myobj[0].ToString();
txtfn.Text = myobj[1].ToString();
txtln.Text = myobj[2].ToString();
txtdob.Text = myobj[3].ToString();
txtage.Text = myobj[4].ToString();
}
}