我在VB.Net 2010中有一个带有6个DataGridViews的WinForm,每个都有自己的绑定源。我有一个额外的主DataGridView控制其他网格中的内容。这是唯一允许添加新记录的网格。所有其他都以编程方式控制。主网格绑定源绑定到一个可观察的对象集合,并为集合中的一个类对象提供额外的绑定源。
我的问题是,当我点击主网格中的新行时,所有内容都会通过实例化一个新的单个类对象来清除,但是当我选中网格或单击或其他任何内容时,绑定网格源将其当前项重置为网格中的第一项。如果我将单个对象绑定源设置为新的实例化对象,它也会清除集合中的第一个项目。在我们使用绑定到可观察集合的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
答案 0 :(得分:1)
已发现问题,并且像往常一样,手指指向自己。 DataSource用于可观察集合的绑定源和单个项目的绑定源,其中设置为相同的变量对象,即单个类对象。 问题解决了。