【问题标题】:Index does not change after sorting datagrid对数据网格进行排序后索引不会更改
【发布时间】:2012-08-16 04:37:07
【问题描述】:

我有问题请帮助我: 我在 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],第二个 csv 是 [z,a,d,k] 排序后的表格包含并显示 [a,a,c,c,d,d,k ,z] 我想要的,但是当我单击行“z”时,它不会删除“z”行,而是删除“k”。换句话说,索引是相同的,但行的位置已更改,删除函数现在根据排序前的最后一个索引删除。我已经尝试刷新数据网格并重新加载数据网格但没有成功,请帮助我谢谢。

【问题讨论】:

  • 我认为问题出在你的表变量上,尝试在运行时使用断点来探索它

标签: .net wpf wpfdatagrid


【解决方案1】:

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

【讨论】:

  • 我应该怎么做,因为它需要定义一个数据行并且一旦定义并插入到一个foreach循环中就会发生错误。
  • @HosseinAmini 如果将两个 csv 文件中的行添加到 ObservableCollection 例如,您可以将 DataGrid 的 ItemsSource 设置为该集合,然后在集合上使用 Remove() 删除选定的项目。
猜你喜欢
  • 1970-01-01
  • 2017-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-10
  • 1970-01-01
  • 2017-03-24
相关资源
最近更新 更多