WPF DataGrid实现刷新按钮 解决绑定MySQL数据重复及操作报错问题
问题原因
- 数据重复是因为你代码中的
sqlData为全局DataTable对象,MySqlDataAdapter的Fill方法默认会在原有数据基础上追加新查询到的记录,不会主动清空旧数据,每次点击刷新都会重复插入全表数据,最终导致列表重复。 - 调用
Items.Clear()报错是因为当DataGrid设置了ItemsSource绑定数据源后,控件条目完全由后台数据源控制,禁止直接修改UI层的Items集合,所有增删改操作都需要针对绑定的数据源执行。
解决方法
只需要在每次查询填充数据前,先清空sqlData中存储的旧数据即可,同时建议用Using块管理数据库相关对象,避免异常时出现连接泄漏问题。修正后的代码如下:
' 先清空旧数据,解决重复问题的核心步骤 sqlData.Clear() ' Using块会在代码执行结束后自动释放连接、命令、适配器资源,无需手动调用Close Using con As New MySqlConnection("server =" + server + ";" + "user id=" + username + ";" + "password= " + password + ";" + "database =" + database) con.Open() Using cmd As New MySqlCommand("select * from suspects_arrests", con) Using sqlAdap As New MySqlDataAdapter(cmd) sqlAdap.Fill(sqlData) End Using End Using End Using DataSuspects.ItemsSource = sqlData.DefaultView
补充说明
如果清空数据源后UI没有自动刷新,可在赋值前加一行DataSuspects.ItemsSource = Nothing先解除旧绑定再重新赋值即可,不需要调用Items.Refresh方法。
内容的提问来源于stack exchange,提问作者Никита
相关产品推荐
相关产品推荐

