C# WinForm中给ObjectListView赋值动态DataSource前如何删除列
错误原因
ErrorEncountered : PreviouslyRenderedMyColumn is neither a DataColumn nor a DataRelation for table
该异常由BrightIdeasSoftware的DataListView的列缓存机制导致:控件会保留上一次绑定数据源时生成的列映射规则,当新绑定的DataTable结构和之前不一致(缺少旧表中的某列)时,控件仍然会尝试用旧列名去新表中取数据,匹配失败就触发该异常。
修复步骤
- 每次绑定新的动态DataTable前,先清空控件已有列和绑定缓存
// 清空所有已生成的OLV列 dataListView1.Clear(); // 清空旧数据源绑定 dataListView1.DataSource = null;
- 确认自动生成列开关已开启(如果需要控件根据表结构自动生成列)
dataListView1.AutoGenerateColumns = true;
- 赋值新的DataTable数据源
// yourDynamicDataTable为你动态生成的新数据表对象 dataListView1.DataSource = yourDynamicDataTable;
特殊场景适配
如果你不需要自动生成列,需要自定义列展示规则:
清空旧列后,手动添加和新DataTable列名完全匹配的OLVColumn对象,再绑定数据源即可,示例如下:
dataListView1.Clear(); dataListView1.DataSource = null; // 手动添加和新表列对应的自定义列 OLVColumn customCol = new OLVColumn("列展示名", "新DataTable对应的列名"); dataListView1.Columns.Add(customCol); // 关闭自动生成列 dataListView1.AutoGenerateColumns = false; // 绑定数据源 dataListView1.DataSource = yourDynamicDataTable;
内容的提问来源于stack exchange,提问作者Amol Chougule
相关产品推荐
相关产品推荐

