2017-02-15 2 views
0

2つのDataGridに問題がありますSelectedItemsが選択されたままになる

最初のDataGridはSQLデータベースのデータを表示するために使用されます。

これで、1行を選択して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

あなたは2つのグリッド間のアイテムの同じインスタンスを共有:

DataGrid2.ItemsSource = DataGrid1.SelectedItems 

をだから、基本的には第2のグリッド上で、それを選択することにより、第1グリッド内のプロパティIsSelectedを変更すると、それはまったく同じオブジェクトが持つですこの変更は、2番目のグリッドも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 
関連する問題