WPF C#中DataTable转ListCollectionView报错及实现需求
解决WPF中DataTable转ListCollectionView的类型转换异常
问题原因
你遇到的无法将类型为‘System.Data.DataTable’的对象强制转换为类型‘System.Collections.IList’异常,核心原因是DataTable本身并未实现IList接口,直接强制转换必然失败。
可行解决方案
方案1:将DataTable行转换为List
把DataTable的行转换为泛型List(List
// 替换原代码中的强转行 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
相关产品推荐
相关产品推荐

