选择新数据后如何在 VB.Net 中刷新 Datagridview
Posted
技术标签:
【中文标题】选择新数据后如何在 VB.Net 中刷新 Datagridview【英文标题】:How refresh Datagridview in VB.Net after seletc a new data 【发布时间】:2021-06-17 19:56:08 【问题描述】:我有一个问题,因为,当我想在 datagridview 中加载一个新的注册时,会显示上一条记录的相同列以及选择的其他列。
这是选择的数据
这是以前记录的新数据
我尝试了一切,但没有任何效果
Pinicio.DataGridView1.Parent.Refresh()
Pinicio.DataGridView1.EndEdit()
Pinicio.DataGridView1.Refresh()
Pinicio.DataGridView1.Parent.Refresh()
我会更好地解释它,当我第一次查询产品时,应用程序工作正常,但是当我尝试找到另一个产品时,它会添加上一篇文章的列以及新选择的产品的列。
添加新产品的代码
Consulta= "SELECT * FROM ARTICULOS AR INNER JOIN ARTICULOSLIN ARL ON AR.CODARTICULO = ARL.CODARTICULO WHERE AR.REFPROVEEDOR = '" + code.ToString + "' AND ARL.TALLA = 'S'"
ConsultaSqlDataAdapter1 = New SqlDataAdapter(Consulta, Login.conexion)
i1 = 0
rs1.Clear()
ConsultaSqlDataAdapter1.Fill(rs1, "TablaTallas")
Pinicio.DataGridView1.DataSource = rs1.Tables(0)
Pinicio.TabPage.TabPages.Add(Pinicio.TabPage2)
Pinicio.TabPage.SelectedTab = Pinicio.TabPage2
Frm_Buscar_Articulos.Close()
【问题讨论】:
您如何选择新数据?您是否创建新查询?生成一个新的DataTable/DataSet/Model?您是否将数据加载到同一个容器而不清除它?你为什么不显示那个代码?顺便说一句,Refresh() 与 UI 元素(它的图形渲染)相关,而不是数据,所以这里无关紧要。 我会更好地解释它,当我第一次查询产品时,应用程序工作正常,但是当我尝试找到另一个产品时,它添加了上一篇文章的列以及新选择的产品,问题中有代码 【参考方案1】:您的投诉是 列 仍然存在
是的,恐怕就是这样。填充表的 DataAdapter 将根据需要创建新列。如果您随后将相同的数据表重新用于不同的查询,则旧列将保留(并且为空)
Clear()
删除行,而不是列
我建议你做一个新表:这是最简单的方法:
Consulta= "SELECT * FROM ARTICULOS AR INNER JOIN ARTICULOSLIN ARL ON AR.CODARTICULO = ARL.CODARTICULO WHERE AR.REFPROVEEDOR = @c AND ARL.TALLA = 'S'"
ConsultaSqlDataAdapter1 = New SqlDataAdapter(Consulta, Login.conexion)
ConsultaSqlDataAdapter1.Parameters.Add("@c", SqlDbType.VarChar, 50).Value = code.ToString() ' change 50 to the width of your column
i1 = 0
Dim dt as New DataTable
ConsultaSqlDataAdapter1.Fill(dt)
Pinicio.DataGridView1.DataSource = dt
请注意我已经修复了你的 sql injection hacking 易受攻击的 sql。永远不要再编写一个将值串连到其中的 SQL。始终使用参数。见http://Bobby-tables.com
在VB中使用&
连接字符串,而不是+
【讨论】:
感谢您的帮助,不胜感激,我将审查sql注入。 非常欢迎!也许看看 Dapper 或强类型数据集,它们可以省去很多这种乏味的低级代码【参考方案2】:无需触摸网格。它只会显示其数据源中的任何内容。您应该填充DataTable
并通过BindingSource
将其绑定到网格。要“刷新”数据,只需重新填充相同的DataTable
。其他一切都会自行解决。如果您打算在重新填充之前清除DataTable
,则可能需要在开始和结束时在BindingSource
上调用SuspendBinding
和ResumeBinding
。
【讨论】:
【参考方案3】:你应该先清除datagridview
Pinicio.dataGridView1.Rows.Clear();
Pinicio.dataGridView1.Refresh();
仅当您不添加新行时才需要刷新
【讨论】:
以上是关于选择新数据后如何在 VB.Net 中刷新 Datagridview的主要内容,如果未能解决你的问题,请参考以下文章