选择新数据后如何在 VB.Net 中刷新 Datagridview
How refresh Datagridview in VB.Net after seletc a new data
我有一个问题,因为,当我想在 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()
你应该先清除datagridview
Pinicio.dataGridView1.Rows.Clear();
Pinicio.dataGridView1.Refresh();
只有在不添加新行时才需要刷新
无需触摸网格。它只会显示其数据源中的任何内容。您应该填充 DataTable
并通过 BindingSource
将其绑定到网格。要“刷新”数据,只需重新填充相同的 DataTable
。其他一切都会自行解决。如果您打算在重新填充之前清除 DataTable
,则可能需要在开始和结束时在 BindingSource
上调用 SuspendBinding
和 ResumeBinding
。
您的抱怨是列仍然
是的,恐怕就是这样;填充 table 的 DataAdapter 将根据需要创建新列。如果您随后对不同的查询重新使用相同的数据table,旧列将保留(并且为空)
Clear()
删除 行 ,而不是 列
我建议你做一个新的table:这是最简单的方法:
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 注入黑客攻击倾向 sql。永远不要再写一个 SQL 字符串连接一个值到它的地方。始终使用参数。参见 http://Bobby-tables.com
使用 &
连接 VB 中的字符串,而不是 +
我有一个问题,因为,当我想在 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()
你应该先清除datagridview
Pinicio.dataGridView1.Rows.Clear();
Pinicio.dataGridView1.Refresh();
只有在不添加新行时才需要刷新
无需触摸网格。它只会显示其数据源中的任何内容。您应该填充 DataTable
并通过 BindingSource
将其绑定到网格。要“刷新”数据,只需重新填充相同的 DataTable
。其他一切都会自行解决。如果您打算在重新填充之前清除 DataTable
,则可能需要在开始和结束时在 BindingSource
上调用 SuspendBinding
和 ResumeBinding
。
您的抱怨是列仍然
是的,恐怕就是这样;填充 table 的 DataAdapter 将根据需要创建新列。如果您随后对不同的查询重新使用相同的数据table,旧列将保留(并且为空)
Clear()
删除 行 ,而不是 列
我建议你做一个新的table:这是最简单的方法:
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 注入黑客攻击倾向 sql。永远不要再写一个 SQL 字符串连接一个值到它的地方。始终使用参数。参见 http://Bobby-tables.com
使用 &
连接 VB 中的字符串,而不是 +