【问题标题】:ICollectionView.SortDescriptions sort does not work if underlying DataTable has zero rows如果基础 DataTable 有零行,ICollectionView.SortDescriptions 排序不起作用
【发布时间】:2011-02-14 06:31:46
【问题描述】:

我们有一个 WPF 应用,它在 ListView 中有一个 DataGrid。

private DataTable table_;

我们生成一堆或动态列(取决于我们显示的报告)

然后我们执行查询并逐行填充 DataTable,此查询可能有数据,也可能没有数据。(不是问题,应该是空网格) 我们将 ListView 的 ItemsSource 设置为 DataTable 的 DefaultView。

lv.ItemsSource = table_.DefaultView;

我们然后(查看用户对应用的通行证使用情况,在列上设置排序) 排序方法如下:

private void Sort(string sortBy, ListSortDirection direction)
{
 ICollectionView dataView = CollectionViewSource.GetDefaultView(lv.ItemsSource);

 dataView.SortDescriptions.Clear();

 var sd = new SortDescription(sortBy, direction);

 dataView.SortDescriptions.Add(sd);

 dataView.Refresh();
}

在零数据表行场景中,排序不“成立”?如果我们动态添加行,它们将不会按排序顺序。

如果在应用排序时 DataTable 至少有 1 行,并且我们动态地将行添加到 DataTable 中,那么这些行将正确排序。

我已经构建了一个独立的应用程序来复制这个......

这很烦人,我可以添加一个检查以查看 DataTable 是否为空,然后重新应用排序...

有人知道这里发生了什么,我做错了吗?

仅供参考:如果也来自 MSDN,我们的依据是:http://msdn.microsoft.com/en-us/library/ms745786.aspx

更新:

排序不是“持有”的意思是,ICollectionView.SortDescriptions 有一个 SortDescription,但没有对添加的数据进行排序, 如果在添加 SortDescription 时有行,则仅在底层 DataTable 中没有行时才会再次发生,然后一切正常~

【问题讨论】:

  • “排序不“持有”是什么意思?

标签: c# wpf datatable sorting icollectionview


【解决方案1】:

显然这是一个 GUI 错误。在 GUI 级别而不是在数据级别上解决它会很好。这是一个建议。

DataTable table_ = new DataSet1().DataTable1;
ICollectionView dv_;

public MainWindow()
{
    InitializeComponent();

    dv_ = CollectionViewSource.GetDefaultView(table_);
    dv_.CollectionChanged += new System.Collections.Specialized.NotifyCollectionChangedEventHandler(dv_CollectionChanged);

    lv.ItemsSource = dv_;
}
void dv_CollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
{

    if (e.Action == NotifyCollectionChangedAction.Add && table_.Rows.Count == 1 )
        dv_.Refresh();
}

【讨论】:

    猜你喜欢
    • 2013-12-01
    • 1970-01-01
    • 2014-08-26
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 2017-11-06
    • 2019-06-02
    • 1970-01-01
    相关资源
    最近更新 更多