选择新数据后如何在 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 上调用SuspendBindingResumeBinding

【讨论】:

【参考方案3】:

你应该先清除datagridview

Pinicio.dataGridView1.Rows.Clear();
Pinicio.dataGridView1.Refresh();

仅当您不添加新行时才需要刷新

【讨论】:

以上是关于选择新数据后如何在 VB.Net 中刷新 Datagridview的主要内容,如果未能解决你的问题,请参考以下文章

在 vb.net 中更新后刷新数据网格视图

数据集更新vb.net后DataGridView不刷新

关于VB.NET中 datagridview 刷新问题

【vb.net】datagridview绑定数据后 数据变化触发事件

关于VB.NET2005中dataGridView的问题

关于VB.NET中 datagridview 刷新问题