1

ListView内にDataGridを持つWPFアプリがあります。

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行のシナリオでは、並べ替えは「保持」されませんか?また、動的に行を追加すると、並べ替えられた順序にはなりません。

並べ替えが適用されたときにDataTableに少なくとも1行があり、DataTableに動的に行を追加すると、行は正しく並べ替えられます。

これを複製するスタンドアロンアプリを作成しました...

これは煩わしいので、DataTableが空かどうかを確認するチェックを追加して、並べ替えを再適用できます...

誰もがここで何が起こっているのか知っています、そして私は何か間違ったことをしていますか?

参考:MSDNからのものである場合、これに基づいたもの: http : //msdn.microsoft.com/en-us/library/ms745786.aspx

アップデート:

「保持」ではない並べ替えは、ICollectionView.SortDescriptionsにSortDescriptionがありますが、追加されたデータを並べ替えていないことを意味します。これも、SortDescriptionが追加されたときに行がある場合、基になるDataTableに行がない場合にのみ発生し、その後、すべてうまくいきます〜

4

1 に答える 1

1

これは明らかに GUI のバグです。データ レベルではなく、GUI レベルで回避できるとよいでしょう。ここに 1 つの提案があります。

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();
}
于 2010-05-05T16:53:31.583 に答える