C#中DataGridView图片列更新异常求助:绑定DataTable后图片未切换
DataGridView Image Not Updating When Bound to DataTable
我来帮你搞定这个图片无法正常更新的问题~核心问题出在你修改的是DataGridView的单元格对象,但控件是绑定到DataTable的,它会优先从数据源(DataTable的行数据)读取内容,所以你的单元格替换操作被数据源覆盖了。
问题原因分析
当DataGridView和DataTable绑定后,UI的显示完全依赖于数据源。你原来的代码先给DataTable的行赋值了Properties.Resources.database,之后试图替换DataGridView的单元格,但绑定机制会让控件始终从DataTable同步数据,刷新后自然还是显示原来的图片。而且直接创建新的DataGridViewImageCell替换原有单元格的方式,在绑定场景下并不是正确的操作路径。
正确解决方案(推荐)
直接修改DataTable对应行的Status列值,绑定的DataGridView会自动同步更新UI,不需要手动调用Refresh():
// 获取DataTable里的目标行(这里是第一行) DataRow targetRow = dtStores.Rows[0]; // 直接修改数据源里的图片值 targetRow["Status"] = Properties.Resources.completed; // 不需要额外Refresh,DataTable的变更会自动通知DataGridView更新
备选方案(不推荐绑定场景使用)
如果你一定要通过操作DataGridView单元格来实现,需要先取消该单元格的数据源绑定,再设置值:
DataGridViewRow dGRVStore = dataGridView1.Rows[0]; // 取消单元格与数据源的绑定关联 dGRVStore.Cells["Status"].OwningColumn.DataPropertyName = ""; // 设置新的图片值 dGRVStore.Cells["Status"].Value = Properties.Resources.completed; // 手动刷新控件 dataGridView1.Refresh();
这个备选方案不够可靠,因为后续如果数据源有变更,该单元格不会再同步更新,所以优先推荐直接修改DataTable的方式。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

