2017-02-14 10 views
2

私はコンボボックスでフィルタリングされたDatagridを持っていて、とのボタンを使用してこのデータグリッドの行を交換したいと思います。データソースに影響を与えずに、WPFでフィルタリングされたDataGridの行を入れ替えるにはどうすればよいですか?

upボタンを使用していますが、行を交換した後、データグリッドのデータソース内の項目は、フィルタされた項目と一致するように変更され、他の行も削除されます。

これは私のコードです:

if (Datagrid1.SelectedIndex != -1 && Datagrid1.SelectedIndex != 0) 
{ 
    DataTable dt = ((DataView)Datagrid1.ItemsSource).ToTable(); 
    int index = Datagrid1.SelectedIndex; 
    DataRow selectedRow = dt.Rows[index]; 
    DataRow newRow = dt.NewRow(); 
    newRow.ItemArray = selectedRow.ItemArray; 
    dt.Rows.Remove(selectedRow); 
    dt.Rows.InsertAt(newRow, index - 1); 
    Datagrid1.ItemsSource = dt.DefaultView; 
    Datagrid1.SelectedIndex = index - 1; 
} 

どのように私は、データ・ソースに影響を与えることなく、自分の順番を変更できますか?この後

Datagrid1.ItemsSource = dt.DefaultView; 

、グリッドに移入されますあなたのフィルタに一致する項目のみ:

+0

私は強く、あなたのプロジェクトのためのMVVM溶液に見て、あなたをお勧めします。 MVVMを使用すると、そのような作業はずっと簡単になります。 – Chrille

+0

@Chrille私はMVVMに精通していません。 – JDM

+0

時間と意欲があれば、このトピックのチュートリアルを検索してみてください。 "MVVM WPF" – Chrille

答えて

1

私はアップボタンにこのコードを使用し、それが働いた:

if (Datagrid1.SelectedIndex != -1 && Datagrid1.SelectedIndex != 0) 
{ 
    int index = Datagrid_PMP.SelectedIndex; 
    DataRow downrow = ((DataRowView)(Datagrid1.SelectedItem)).Row; 
    DataRow temprow = sourceTable.NewRow(); 
    temprow.ItemArray = downrow.ItemArray; 
    sourceTable.Rows.Remove(downrow); 
    Datagrid1.SelectedIndex = index - 1; 
    DataRow uprow = ((DataRowView)(Datagrid1.SelectedItem)).Row; 
    int i = dset.Tables[2].Rows.IndexOf(uprow); 
    sourceTable.Rows.InsertAt(temprow, i); 
    Datagrid1.SelectedIndex = index - 1; 
} 
0

問題は、次の行には、現在のフィルタされたビューを持つアイテムのリストを交換することにあります。

+0

私は知っています。コメント後、この行の入れ替えは行われません。 – JDM

+0

この特定の行が実行されない場合は、使用されない「dt」の項目を入れ替えます。私はあなたが根本的な問題を抱えていると思います。フィルタリングされたビューでスワップを定義するにはどうすればよいですか? – Chrille

+0

私はデータグリッドitemsSource(ソースDataTable)の列でいっぱいのコンボボックスを持っていて、データグリッドはコンボボックスで選択された項目によってフィルタリングされるので、フィルタは結果としてcomboxの選択項目に関連する行とユーザーのみを表示しますコンボボックスで選択されている指定された列内の同じ値を持つ行をスワップする必要があります。しかし、ユーザーの変更後、私は他の目的のためにすべての行を必要とし、それらを保存します。 – JDM

関連する問題