我有一个DataGridView,在以编程方式设置数据源后不会更新其内容。我已经验证了新数据很好,并尝试了.Refresh,将数据源设置为空,还有一些其他的东西让它用新数据重绘自己。我花了好几个小时尝试各种事件组合(甚至将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
基本上,另一个打开的表单在其form.closing事件中调用“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
答案 0 :(得分:1)
成功!!我想到的是我所要做的就是在打开子窗体时使用ShowDialog()而不是Show(),这样当它关闭时,我只需要检查DialogResult.Cancel,然后从中调用函数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()。
答案 1 :(得分:0)
你在if语句中刷新:
If calledfrompopup Then
确保你传递的是真的并且你正在那里。接下来,而不是刷新只是在if语句中设置数据源:
If calledfrompopup Then
//The use of "Me" here may not be necessary.
Me.dgvOrders.DataSource = QBI.Order_DataICT.GetNewOrdersICT()