1

問題があります。助けてください。WPF に、contacts_datagrid という名前のデータグリッドがあります。2 つのフィールド (名前、電話番号) を持つ CSV ファイルからデータを読み込みます。アプリを実行すると、この csv ファイルからデータが読み込まれます。次のコードを使用して、別の csv ファイルをインポートし、そのデータを最初の csv ファイルの末尾に追加するインポート関数を配置しました。

foreach (DataRow drow in second_csv_file.Rows)
  {
   First_csv_file.Rows.Add(drow.ItemArray);
  }

それは正常に動作します。次に、列をアルファベット順に並べ替えたいので、これを使用します。

ICollectionView dataView = CollectionViewSource.GetDefaultView(contacts_datagrid.ItemsSource);
dataView.SortDescriptions.Clear();
dataView.SortDescriptions.Add(new SortDescription("Name", ListSortDirection.Ascending));
dataView.Refresh();  

これはどちらも正常に機能し、これを行った後、新しいテーブルにはすべてのデータが昇順でマージされます。問題は、次を使用して選択したインデックスの行を削除しようとしたときに、これを実行した後です。

table.Rows.RemoveAt(contacts_datagrid.SelectedIndex);

プログラムは正しいインデックスを削除しません。たとえば、私の最初の csv は [a,c,c,d] で、2 番目の csv は [z,a,d,k] です。 ,z] が必要ですが、行「z」をクリックすると、「z」行は削除されず、代わりに「k」が削除されます。つまり、インデックスは同じですが、行の位置が変更されています。delete 関数は、ソートされる前の最後のインデックスに基づいて削除するようになりました。データグリッドの更新とデータグリッドのリロードを試みましたが、成功しませんでした。ありがとうございます。

4

1 に答える 1

2

グリッドで並べ替え操作を行った後、DataGrid の SelectedIndex はソースのインデックスと同じ項目を指しません。代わりに SelectedItem を使用し、RemoveAt(index) の代わりに Remove(item) を使用してみてください。

于 2012-08-21T07:36:43.283 に答える