2

这是一个 VB.NET,Winforms 应用程序。我在“Form1”上有一个 datagridview,它使用一个 databinding.datasource,它是一个实体框架表。我在 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。这让我已经困惑了 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
4

1 回答 1

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()

对话框关闭后。

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

于 2012-09-24T01:05:06.790 回答