排序datagrid后,索引不会更改

时间:2012-08-20 20:24:10

标签: .net wpf wpfdatagrid

我有问题请帮帮我: 我在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);

程序dos不删除正确的索引。例如,我的第一个csv是[a,c,c,d],第二个csv是[z,a,d,k]排序后的表包含并显示[a,a,c,c,d,d,k ,z]我想要但是当我点击行“z”时它不会删除“z”行而是删除“k”。换句话说,索引是相同的但行的位置已经改变,删除功能现在根据排序之前的最后索引删除。我试过刷新datagrid并重新加载datagrid但没有成功,请帮助我谢谢。

1 个答案:

答案 0 :(得分:1)

在对网格执行排序操作后,DataGrid中的SelectedIndex将不会指向与源中的索引相同的项目。 尝试使用SelectedItem代替Remove(item)而不是RemoveAt(index)。