2

これはVB.NET、Winformsアプリです。EntityFrameworkテーブルであるdatabinding.datasourceを使用する"Form1"のdatagridviewがあります。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

これはうまく機能し、必要な値をバインドされていない列に割り当てます。問題は、cells(1)がボタンであるということです。クリックすると、ユーザーは新しいダイアログウィンドウとして別のフォームに移動します。以下の機能。ただし、その形式で変更が行われたら、datagridviewがデータベースから使用しているデータを更新し、正しいデータを表示する必要があります。現在のところ、アプリを完全に終了して再起動しない限り、datagridviewの値は更新されません。私が見つけたものは何も機能していないようで、更新と更新はコントロールを再描画するだけです。基になるデータソースを更新し、子フォームが終了したらdatagridviewが必要です。これにより、36時間も困惑し、何も機能していない理由がわかりません。すべての助けをいただければ幸いです。

クリックされたcells(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

私はついにこれを自分で修正しました。これは、dbコンテキストをデータバインディングに渡す方法でした。

私は単に以下のサブを書きました:

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 に答える