DataGridView不刷新/更新/重新加载数据。儿童表格结束后

时间:2012-09-23 00:20:56

标签: vb.net

这是一个VB.NET,Winforms App。我在“Form1”上有一个datagridview,它使用一个databinding.datasource,它是一个Entity Framework表。我使用Form1上的以下函数填充datagridview:

Sub PM_UnitViewGrid()
    Try

        _form1.UnitsBindingSource.DataSource = db.units.Where(Function(f) f.propertyId = _form1.CurrentPropertyId).OrderBy(Function(F) F.unitNumber)
        _form1.UnitDataGridView.DataSource = _form1.UnitsBindingSource.DataSource
        Dim iCount As Integer = _form1.UnitDataGridView.RowCount
        For x As Integer = 0 To iCount - 1
            If Not IsNothing(_form1.UnitDataGridView.Rows(x).Cells(4).Value) Then
                Dim tid As Integer = _form1.UnitDataGridView.Rows(x).Cells(4).Value
                Dim _ten As tenant = db.tenants.Single(Function(f) f.Occupantid = tid)
                _form1.UnitDataGridView.Rows(x).Cells(1).Value = _ten.first_name + ", " + _ten.last_name
            Else
                Dim btnColumn As DataGridViewButtonCell = CType(_form1.UnitDataGridView.Rows(x).Cells(1), DataGridViewButtonCell)
                btnColumn.Style.BackColor = Color.Green
                _form1.UnitDataGridView.Rows(x).Cells(1).Value = "VACANT"
            End If
        Next

    Catch ex As Exception
        MessageBox.Show(ex.Message)
    End Try

    Return
End Sub

这很好用,并且还为未绑定的列分配所需的值。问题是单元格(1)是一个按钮。单击时,用户将另一个表单作为新的对话框窗口。其功能如下。但是,一旦以该形式进行更改,我需要datagridview刷新其使用的数据并显示正确的数据。现在看来,除非应用程序完全退出并重新启动,否则不会在datagridview上更新值。我找不到任何东西似乎工作,刷新和更新只重绘控件。我需要刷新基础数据源,然后在退出子表单后再使用datagridview。这让我感到困难了36个小时了,我迷失了为什么我正在努力的工作。任何和所有的帮助将不胜感激。

根据单击的单元格(1)按钮加载子表单的子句如下:

Private Sub UnitDataGridView_CellContentClick(ByVal sender As System.Object, ByVal e As System.Windows.Forms.DataGridViewCellEventArgs) Handles UnitDataGridView.CellContentClick
    UnitDataGridView.CommitEdit(DataGridViewDataErrorContexts.CurrentCellChange)
    Dim y As DataGridViewCellEventArgs = e
    Dim Tid As Integer = Nothing
    If e.ColumnIndex = 1 Then
        If Not e.RowIndex = -1 Then
            If Not IsNothing(UnitDataGridView.Rows(e.RowIndex).Cells(4).Value) Then
                currentTenent = UnitDataGridView.Rows(e.RowIndex).Cells(4).Value
                TenentIdentification = currentTenent
                If Not IsNothing(e) Then
                    If Not IsNothing(UnitDataGridView.Rows(e.RowIndex).Cells(4).Value) Then
                        Tid = UnitDataGridView.Rows(e.RowIndex).Cells(4).Value
                        Dim _ten As tenant = db.tenants.Single(Function(f) f.Occupantid = Tid) 'tenant is a table entity 
                        TenantViewSubs.tenId = _ten.Occupantid
                        Dim t As New TenantView
                        t.tenId = tid
                        t.ShowDialog()
                    End If
                End If

                PropertyManagSubs.PM_UnitViewGrid() 'This is the function that is above that fills the datagridview
            Else
                Dim uTview As New UnassignedTenants
                uTview.selectedProperty = selectedProperty 'selectedProperty is Integer 
                uTview.ShowDialog()

                PropertyManagSubs.PM_UnitViewGrid() 'This is the function that is above that fills the datagridview
            End If
        End If
    End If
End Sub 

我在t.ShowDialog()行之后尝试了以下每个代码块,但没有任何改变。

UnitDataGridView.Refresh()

UnitsBindingSource.Dispose()
UnitsBindingSource.DataSource = db.units.Where(Function(f) f.propertyId = selectedProperty).OrderBy(Function(f) f.unitNumber)
UnitDataGridView.DataSource = UnitsBindingSource.DataSource

UnitsBindingSource.DataSource = nothing
unitsBindingSource.DataSource = db.units.Where(Function(f) f.propertyId = selectedProperty).OrderBy(Function(f) f.unitNumber)
UnitDataGridView.DataSource = UnitsBindingSource.DataSource

1 个答案:

答案 0 :(得分:2)

我终于解决了这个问题。这是我将数据库上下文传递给数据绑定的方式..

我只是写下面的子:

Private Sub UpdateValues()
    Dim context As New storageEntities 'storageEntities is an Entity
    Dim query = context.units.Where(Function(F) F.propertyId = selectedProperty).OrderBy(Function(f) f.unitNumber)
    UnitDataGridView.DataSource = query
End Sub

然后,只要孩子形成更新的数据,我只需致电

  UpdateValues()

对话框关闭后。

这可能会帮助其他人遇到同样的问题,这就是我发布它的原因。