SelectedItems应该保持选中状态

时间:2017-02-15 11:57:07

标签: sql wpf vb.net datagrid

我的两个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

2 个答案:

答案 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