我的两个DataGrids出现问题
第一个DataGrid用于显示SQL数据库中的数据。
现在我想要的是,如果我选择一行并将其保存到Datagrid2,它将保持选中状态并且不会更改。
问题是,如果我改变了行,DataGrid2也会改变。
我希望你理解我的问题。
这是代码
Public Sub SelectItem()
Try
Dim rows As List(Of Integer) = New List(Of Integer)
For Each cell As DataGridCellInfo In DataGrid1.SelectedCells
rows.Add(DataGrid1.Items.IndexOf(cell.Item))
DataGrid1.SelectedItems.Clear()
Next
For Each Item As Integer In rows
If (Item < DataGrid1.Items.Count) Then
DataGrid1.SelectedItems.Add(DataGrid1.Items.GetItemAt(Item))
DataGrid2.ItemsSource = DataGrid1.SelectedItems
End If
Next
Catch ex As Exception
GeneralMergeTools.ShowError(ex, GeneralMergeTools.FatalError.CriticalError, "ContentControl1.SelectedItem")
End Try
End Sub
亲切的问候
编辑:
我将在这里添加我的代码,用于具有相同或类似问题的未来人员。
Public Sub SelectItem() 'Auf Knopfdruck
Try
Dim dt As DataTable = CType(Me.DataGrid1.ItemsSource, DataView).Table.Clone
For Each r1 As System.Data.DataRowView In Me.DataGrid1.SelectedItems
Dim r2 As DataRow = dt.NewRow
For Each c As System.Data.DataColumn In dt.Columns
r2.Item(c.ColumnName) = r1.Row(c.ColumnName)
Next
dt.Rows.Add(r2)
DataGrid2.ItemsSource = dt.DefaultView
Next
Catch ex As Exception
GeneralMergeTools.ShowError(ex, GeneralMergeTools.FatalError.CriticalError, "ContentControl1.SelectedItem")
End Try
End Sub
答案 0 :(得分:0)
您在两个网格之间共享相同的项目实例:
DataGrid2.ItemsSource = DataGrid1.SelectedItems
所以基本上当你通过选择它来改变第一个网格中的属性IsSelected
时,在第二个网格上它也是完全相同的对象也有这个改变,所以第二个网格也相应地改变了SelectedItem
。
要解决此问题,您需要在ItemSource
。
答案 1 :(得分:0)
所以这是我工作良好的代码:
Public Sub SelectItem()
Try
Dim dt As DataTable = CType(Me.DataGrid1.ItemsSource, DataView).Table.Clone
For Each r1 As System.Data.DataRowView In Me.DataGrid1.SelectedItems
Dim r2 As DataRow = dt.NewRow
For Each c As System.Data.DataColumn In dt.Columns
r2.Item(c.ColumnName) = r1.Row(c.ColumnName)
Next
dt.Rows.Add(r2)
DataGrid2.ItemsSource = dt.DefaultView
Next