You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WPF C#中DataTable转ListCollectionView报错及实现需求

解决WPF中DataTable转ListCollectionView的类型转换异常

问题原因

你遇到的无法将类型为‘System.Data.DataTable’的对象强制转换为类型‘System.Collections.IList’异常,核心原因是DataTable本身并未实现IList接口,直接强制转换必然失败。

可行解决方案

方案1:将DataTable行转换为List

把DataTable的行转换为泛型List(List天然实现IList接口),再传入ListCollectionView构造函数:

// 替换原代码中的强转行
var dataRowList = Models.AsEnumerable().ToList();
listCollectionView = new ListCollectionView(dataRowList);

方案2:利用DataTable的DefaultView

DataTable的DefaultView返回DataView,而DataView实现了IListSource接口,可通过它获取兼容IList的数据源:

DataView dataView = Models.DefaultView;
IList dataList = dataView as IList;
if (dataList != null)
{
    listCollectionView = new ListCollectionView(dataList);
}

方案3:通过CollectionViewSource生成视图

如果无需显式实例化ListCollectionView,可借助CollectionViewSource自动生成适配的视图:

CollectionViewSource viewSource = new CollectionViewSource();
viewSource.Source = Models.DefaultView;
listCollectionView = viewSource.View as ListCollectionView;

额外建议

  • 若只是为了绑定WPF控件,直接使用Models.DefaultView作为数据源也能实现排序、过滤等功能,不一定非要显式创建ListCollectionView。
  • 若业务需要将DataTable映射为自定义实体类集合,可通过Linq转换后再生成视图:
var modelList = Models.AsEnumerable().Select(row => new YourCustomModel
{
    Id = row.Field<int>("Id"),
    Name = row.Field<string>("Name")
}).ToList();
listCollectionView = new ListCollectionView(modelList);

内容的提问来源于stack exchange,提问作者Rahul Mahajan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 13:30:03