以编程方式更改数据源后,Winform DataGridView不刷新
本文关键字:Winform DataGridView 刷新 编程 方式更 数据源 | 更新日期: 2023-09-27 18:05:58
我有一个DataGridView,不会更新其内容后编程设置它的数据源。我已经验证了新数据是好的,并尝试了. refresh,将数据源设置为none和其他一些东西,以使其使用新数据重新绘制自己。我花了几个小时尝试各种事件的组合(甚至将DotNet框架降级到3.5,看看它是否是4.5框架中的错误)和其他论坛上的技巧。没有作品。
Public Sub GetNewOrders(Optional calledfrompopup As Boolean = False)
Me.dgvOrders.DataSource = QBI.Order_DataICT.GetNewOrdersICT()
If calledfrompopup Then
''100% certain that the datasource info has changed, yet datagridview just won't reflect the change!
Me.pnlOrders.Refresh() 'does not work
Me.dgvOrders.Refresh() 'does not work
End If
End Sub
基本上,另一个被打开的表单,在其表单中调用"GetNewOrders"。关闭事件,然后关闭。调用表单具有上述方法,并检查是否需要刷新datagridview(我认为这是一种解决方案,但是,唉,它没有)。正如您所看到的,我已经尝试刷新datagridview所在的面板(以及表单本身)。刷新绝对没有做任何事情,没有重绘或重新绑定或任何我能找到的东西,将强制datagridview重新加载自己。难住了!答案在c#或VB。Net语言都可以
函数的另一个版本,显示我尝试过的其他东西
Public Sub GetNewOrders(Optional calledfrompopup As Boolean = False)
Me.dgvOrders.DataSource = Nothing 'does not work
Me.dgvOrders.DataMember = "" 'does not work
Me.dgvOrders.DataSource = QBI.Order_DataICT.GetNewOrdersICT() '100% certain that the datasource info has changed, yet datagridview just won't reflect the change!
If calledfrompopup Then
Me.pnlOrders.Refresh() 'does not work
Me.dgvOrders.Refresh() 'does not work
Me.dgvOrders.Show() 'does not work
Me.dgvOrders.Visible = False 'does not work
Me.dgvOrders.Visible = True 'does not work
End If
End Sub
成功!!我所知道的是,我所要做的就是在打开子窗体时使用ShowDialog()而不是Show(),这样当它关闭时,我只需要检查dialgresult。取消,然后从父类调用GetNewOrders函数,如下所示:
Dim frm2 As New frmSendToQuickbooksPopup
frm2.CurrentOrder = Order
frm2.lineitems = OrdLineItems
frm2.payments = OrdPayments
Dim diaResult As DialogResult = frm2.ShowDialog()
If diaResult = Windows.Forms.DialogResult.Cancel Then
GetNewOrders()
End If
解释一下:frm2是打开的,当它被关闭时,datagridview(在父表单上)现在看到它是关闭的,并调用GetNewOrders()方法。
在if语句中刷新:
If calledfrompopup Then
确保你传递的是true,并且你正在使它在那里。接下来,不用刷新只需在if语句中设置数据源:
If calledfrompopup Then
//The use of "Me" here may not be necessary.
Me.dgvOrders.DataSource = QBI.Order_DataICT.GetNewOrdersICT()