Mam problem z moimi dwoma datagridami

Pierwszy DataGrid służy do pokazywania danych z bazy danych SQL.

Teraz chcę tego, jeśli wybiorę jeden wiersz i zapisać go do DataGrid2, pozostaje wybrany i nie zmieni.

Problem polega na tym, że jeśli zmienię wiersz, również zmienia się DataGrid2.

Mam nadzieję, że rozumiesz mój problem.

Oto kod

    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

Z poważaniem

EDYTOWAĆ:

Dodam tutaj mój kod dla przyszłych ludzi, którzy mają ten sam lub podobny problem.

    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
xcrookedxedge 15 luty 2017, 14:57

2 odpowiedzi

Najlepsza odpowiedź

Udostępniasz tę samą instancję elementów między 2 siatkami:

DataGrid2.ItemsSource = DataGrid1.SelectedItems

Więc w zasadzie, gdy zmienisz właściwość IsSelected w pierwszej siatce, wybierając go, na drugim siatce jest dokładnie taki sam obiekt, który ma taką zmianę, więc druga siatka również zmienia SelectedItem.

Aby naprawić to zachowanie, musisz mieć różne instancje obiektów w swoim {x0}}.

0
3615 15 luty 2017, 12:49

Więc to jest mój bardzo dobrze pracujący kodeks dla tej sprawy:

    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
0
xcrookedxedge 15 luty 2017, 15:49