C# Winforms中如何结合Dapper 1.60.6使用BindingList
问题解决方案
错误原因分析
- 编译报错的核心原因是
List<T>和BindingList<T>是相互独立的集合类型,不存在隐式转换规则,也不支持直接强制类型转换 - 运行时抛出空引用异常,是因为对
Query返回的IEnumerable结果直接强转BindingList<T>,类型不匹配导致转换结果为null,后续调用时触发空引用
正确实现方式
BindingList<T>提供了可接收IList<T>参数的构造函数,你只需要将Dapper查询得到的List<T>传入构造函数即可,示例代码如下:
public BindingList<DisplayTransaction> GetTransactionsBinding() { string sql = @"select * from transaction"; var queryResult = _conn.Query<DisplayTransaction>(sql).ToList(); return new BindingList<DisplayTransaction>(queryResult); }
额外注意事项
- 如果需要绑定到UI控件后支持修改属性自动同步UI,需要给
DisplayTransaction类实现INotifyPropertyChanged接口 - 调用该方法前需要确认
_conn数据库连接对象已完成初始化且状态正常,避免触发其他空引用异常
内容的提问来源于stack exchange,提问作者KBagaipo
相关产品推荐
相关产品推荐

