如果基础DataTable具有零行,则ICollectionView.SortDescriptions排序不起作用

时间:2010-04-30 14:36:51

标签: c# wpf datatable sorting icollectionview

我们有一个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();
}

在Zero DataTable行场景中,排序不会“保持”?如果我们动态添加行,它们将不按排序顺序。

如果DataTable在应用排序时至少有一行,并且我们动态地向DataTable添加行,则行com正确排序。

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

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

任何人都知道这里发生了什么,我做错了什么?

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

更新

排序不是“保持”意味着,ICollectionView.SortDescriptions有一个SortDescription,但没有按照添加的方式对数据进行排序, 再次只有在基础DataTable中没有行时才会发生,如果添加SortDescription时有行,那么一切都很好〜

1 个答案:

答案 0 :(得分: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();
}