2017-02-15 6 views
0

У меня есть проблема с моими двумя DataGridsSelectedItems должен оставаться Selected

Первый 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 

С наилучшими пожеланиями

EDIT:

Я добавлю здесь свой код для будущего Людей, которые имеют такие же или подобную проблему.

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

Вы разделяете тот же экземпляр Items между 2 сетками:

DataGrid2.ItemsSource = DataGrid1.SelectedItems 

Поэтому в основном при изменении свойства IsSelected в первой сетке, выбрав его, на второй сетке, это точно такой же объект, имеющий также это изменение, поэтому вторая сетка также меняет SelectedItem соответственно.

Для исправления этого поведения вам необходимо иметь разные экземпляры объектов в вашем ItemSource.

+0

Это делает абсолютно Sence мне. Я постараюсь выяснить другую возможность. Спасибо. – xcrookedxedge

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