每次按下刷新按钮时DataGridView都会重复vb.net
Posted
技术标签:
【中文标题】每次按下刷新按钮时DataGridView都会重复vb.net【英文标题】:DataGridView duplicating everytime I press refresh button vb.net 【发布时间】:2021-04-01 11:14:18 【问题描述】:我正在尝试刷新我的 DataGridView1。我想我必须添加一个清除功能,因为每次按下刷新按钮时它都会不断复制数据。我没有使用 DataGridView1 的数据源。
提前感谢您的宝贵时间。
编码:
Private Sub btnRefresh_Click(sender As Object, e As EventArgs) Handles btnRefresh.Click
Refreshdata()
End Sub
Dim myConnection As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Users\ahmed\OneDrive\Desktop\ProjectDatabase2003.mdb")
Dim DS As DataSet = New DataSet
Dim DA As OleDbDataAdapter
Dim tables As DataTableCollection = DS.Tables
Dim source1 As New BindingSource()
Private Sub Refreshdata()
DA = New OleDbDataAdapter("Select * from Risk_Register", myConnection)
DA.Fill(DS, "Risk_Register")
Dim view1 As New DataView(tables(0))
source1.DataSource = view1
DataGridView1.DataSource = view1
DataGridView1.Refresh()
End Sub
【问题讨论】:
【参考方案1】:Fill
方法可以复制行,
Fill 操作将行添加到指定的目标 DataSet 中的 DataTable 对象,如果存在则创建 DataTable 对象 尚不存在。创建 DataTable 对象时,Fill 操作通常只创建列名元数据。然而,如果 MissingSchemaAction 属性设置为 AddWithKey,适当 还会创建主键和约束。
如果存在主键信息,任何重复的行都会被 调和并且只在对应的DataTable中出现一次 到数据集。主键信息可以通过以下方式设置 FillSchema,通过指定 DataTable 的 PrimaryKey 属性,或 通过将 MissingSchemaAction 属性设置为 AddWithKey。
https://docs.microsoft.com/en-us/dotnet/api/system.data.oledb.oledbdataadapter.fill?view=netframework-4.7
确保在目标表上定义了 PK。或者在填充之前清除表格,但要注意表格参与的 FK 和关系(如果有)。
【讨论】:
我试图在填充之前清除 DataGridView1,但这对我来说也不管用 DataGridView1.Rows.Clear()。我没有使用数据源,是的,我在表中定义了一个 PK。它只是复制 vb.net 应用程序上的表,而不是我的 Access 数据库。 我收到一条错误消息,提示“无法清除列表” 清除 DataTable,而不是 DataGridView 我可以在 Refreshdata() 之前添加这个吗?还有我以前从未使用过的清除 DataTable 的格式是什么? 如果这是填充 DS 的唯一数据检索点,您可以清除整个 DS。DS.Clear()
然后DA.Fill(DS, ...)
。【参考方案2】:
我认为你应该调用适配器下可用的更新方法。
【讨论】:
抱歉,不明白你的意思。以上是关于每次按下刷新按钮时DataGridView都会重复vb.net的主要内容,如果未能解决你的问题,请参考以下文章
每次按下按钮都会触发本机 TextInput onSubmitEditing