1

VB.Net 2010に6つのDataGridViewを備えたWinFormがあり、それぞれに独自のバインディングソースがあります。他のグリッドにあるものを制御するメインのDataGridViewがもう1つあります。これは、新しいレコードを追加できる唯一のグリッドです。他のすべてはプログラムで制御されます。メイングリッドバインディングソースは、オブジェクトの監視可能なコレクションにバインドされ、コレクションのクラスオブジェクトの1つに追加のバインディングソースが追加されます。

私の問題は、メイングリッドの新しい行をクリックすると、新しい単一クラスオブジェクトをインスタンス化することで想定どおりにすべてがクリアされることですが、グリッドからタブで移動したり、クリックしたりすると、 gridは、現在のアイテムをグリッドの最初のアイテムにリセットします。単一のオブジェクトバインディングソースを新しいインスタンス化されたオブジェクトに設定すると、コレクションの最初のアイテムもクリアされます。これは、監視可能なコレクションにバインドされたDataGridViewsを使用する他の画面では発生しません。私は何が欠けていますか?

グリッドクリック実装のサンプルコード

Private Sub dgvReports_CellClick(sender As Object, e As DataGridViewCellEventArgs) Handles dgvReports.CellClick
If e.RowIndex < 0 Or dgvReports.SelectedRows.Count < 0 Then
    Exit Sub
End If

If Not dgvReports.Rows(e.RowIndex).IsNewRow Then
    objReport = dgvReports.Rows(e.RowIndex).DataBoundItem
    objReport.SerializeToDB()
    intSelIndex = e.RowIndex
    objReport = objReport.Deserialize()
    If objReport.MsgObject.ErrMsg > "" Then
        objReport.MsgObject.DisplayErrMsg()
    End If
    btnDelete.Enabled = True And Not blnReadOnly
Else
    objReport = New RBL.Report
    objReport.GlobalID = Guid.NewGuid.ToString
    intSelIndex = e.RowIndex
    btnDelete.Enabled = False
End If
' The following 3 lines of code causes the first record in grid to be reset
' but works in other implementations    
'If objReport IsNot Nothing Then
    'bsReport.DataSource = objReport
'End If

btnApply.Enabled = False
UpdateReportObjects()
End Sub

Private Sub UpdateReportObjects()
Dim objRprt As RBL.Report = Nothing

If dgvReports.SelectedRows.Count = 1 Then
    objRprt = dgvReports.SelectedRows(0).DataBoundItem
End If

' Set all local observable collections to Report properties
If objReport.GlobalID = objRprt.GlobalID Then
    RptFieldLst = objReport.ReportFields
    RptTableLst = objReport.TableList
    DisplayFieldLst = objReport.DisplayFields
    SortFldLst = objReport.SortList
Else
' Instantiate new collections and set to new Report object properties
    RptTableLst = New RBL.ReportTables()
    RptFieldLst = New RBL.ReportFields()
    DisplayFieldLst = New RBL.ReportFields()
    NonDisplayFieldLst = New RBL.ReportFields()
    SortFldLst = New RBL.ReportSortOrders()
    objReport.TableList = RptTableLst
    objReport.ReportFields = RptFieldLst
    objReport.DisplayFields = DisplayFieldLst
    objReport.SortList = SortFldLst
End If
End Sub
4

1 に答える 1

1

問題が発見され、いつものように指が自分の方を向いています。監視可能なコレクションのバインディング ソースの DataSource と、同じ変数オブジェクトである単一のクラス オブジェクトに設定されている単一アイテムのバインディング ソース。問題が解決しました。

于 2012-11-30T17:55:35.420 に答える