微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在不重新填充DataTable / DataSet的情况下刷新与BindingSource绑定的DataGridView?

如何解决如何在不重新填充DataTable / DataSet的情况下刷新与BindingSource绑定的DataGridView?

我有一个与BindingSource绑定且完全正常工作的DataGridView,还有另一个未绑定的组合框,我打算用它来更新数据并将反映在DataGridView上。当我使用sqlDataAdapter.Update更新DataSet时,值已更新/更改(我已经从sql Server中检查过),但是问题是,它没有反映在DataGridView上。我已经尝试了一切。希望可以有人帮帮我。我尝试不使用拖放方式使用BindingSource,因为我想通过纯编码学习它。这是我来自Form_Load的代码

Private con As New sqlConnection(ConfigurationManager.ConnectionStrings("MdmConnection").ConnectionString)
Private damachineDashboard As sqlDataAdapter
Private dsMonitoring As New DataSet
Private bsMachineDashboard As New BindingSource
Private bsMachinestatus As New BindingSource
Private cmdMachineDashboard As sqlCommand
Private cmd As sqlCommand
Private adp As sqlDataAdapter

Private Sub frmMain_Load(sender As Object,e As EventArgs) Handles Me.Load
    cmdMachineDashboard = New sqlCommand("spReadMachine",con)
    damachineDashboard = New sqlDataAdapter(cmdMachineDashboard)
    damachineDashboard.Fill(dsMonitoring,"MachineDashboard")
    bsMachineDashboard.DataSource = dsMonitoring
    bsMachineDashboard.DataMember = "MachineDashboard"
    dgvMachinestatus.DataSource = bsMachineDashboard
    cmbMachinestatus.DataBindings.Add(New Binding("SelectedValue",bsMachineDashboard,"MachinestatusId"))

    cmd = New sqlCommand("spReadMachinestatus",con)
    adp = New sqlDataAdapter(cmd)
    adp.Fill(dsMonitoring,"Machinestatus")
    bsMachinestatus.DataSource = dsMonitoring.Tables("Machinestatus")
    cmbMachinestatus.DataSource = bsMachinestatus
    cmbMachinestatus.ValueMember = "MachinestatusId"
    cmbMachinestatus.displayMember = "MachinestatusDescription"
End Sub

这是“保存/更新”按钮上的代码

bsMachineDashboard.EndEdit()

        If dsMonitoring.HasChanges Then
            If MessageBox.Show("Save current changes?","",MessageBoxButtons.YesNo,MessageBoxIcon.Question,MessageBoxDefaultButton.Button1) = Windows.Forms.DialogResult.Yes Then
                cmdMachineDashboard = New sqlCommand("spUpdateMachine",con)
                damachineDashboard = New sqlDataAdapter(cmdMachineDashboard)
                cmdMachineDashboard.CommandType = CommandType.StoredProcedure
                cmdMachineDashboard.Parameters.AddWithValue("@MachineId",sqlDbType.Int).Value = cmbMachineName.SelectedValue
                cmdMachineDashboard.Parameters.AddWithValue("@MachinestatusId",sqlDbType.Int).Value = cmbMachinestatus.SelectedValue
                damachineDashboard.UpdateCommand = cmdMachineDashboard
                damachineDashboard.Update(dsMonitoring,"MachineDashboard")
            End If
        End If

我认为我的代码是正确的,因为它没有出现错误并且成功更新了,只是DataGridView不能反映从ComboBox中选择的更改。

我已经尝试过的代码

dgvMachinestatus.Refresh()
dgvMachinestatus.RefreshEdit()
bsMachineDashboard.ResetBindings(True)
bsMachineDashboard.ResetBindings(False)
dsMonitoring.AcceptChanges()

我也尝试了CurrencyManager(我只是忘记了语法),但是也没有用,将DataGridView放在面板外,并将ReadOnly属性设置为false。最后,我还尝试了此处和其他网站/论坛中的其他方法,但是仍然没有用。我的最后一个选择是首先将DataSource设置为nothing(或使用DataSet Clear方法),然后使用sqlDataAdapter重新加载/重新填充DataSet,这就是为什么我提出一个问题,因为我知道这将是性能方面的一个问题,尤其是一旦编号的机器数量将达到数千。多谢您耐心阅读此问题。谢谢您,请注意安全。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?