32

WPF DataGrid をプログラムで並べ替える方法はありますか (たとえば、最初の列をクリックした場合など)?

このクリックをシミュレートする方法はありますか?

これが私のコードです:

Collection_Evenements = new ObservableCollection<Evenement>();
 
Collection_Evenements = myEvenement.GetEvenementsForCliCode(App.obj_myClient.m_strCode);
Collection_Evenements.CollectionChanged += Collection_Evenements_CollectionChanged;
myDataGridEvenements.ItemsSource = Collection_Evenements;
 
System.Data.DataView dv = (System.Data.DataView)myDataGridEvenements.ItemsSource;
dv.Sort = "strEvtType";
            
myDataGridEvenements.Focus();
myDataGridEvenements.SelectedIndex = 0;
myDataGridEvenements.MoveFocus(new TraversalRequest(FocusNavigationDirection.Next));

理由はわかりませんが、行dv.Sort = "strEvtType";によって奇妙なことが起こり、ウィンドウが表示され、プログラムは次の行を実行し続けません。それにもかかわらず、並べ替えが表示されません!

4

6 に答える 6

6

ItemsSource の DataView を取得し、その Sort プロパティを使用して、並べ替える列を指定します。

(yourDataGrid.ItemsSource as DataView).Sort = "NAME_OF_COLUMN";
于 2013-06-06T07:49:21.777 に答える
3

私の方法は私にとってはうまくいきます。このコードを試してみてください。ロシア語でごめんなさい

// Если таблица пустая, то привязываем ее к журналу 
            if(dgEvents.ItemsSource == null)
                dgEvents.ItemsSource = events.Entries;
            // Обновляем записи
            CollectionViewSource.GetDefaultView(dgEvents.ItemsSource).Refresh();
            // Очищаем описание сортировки
            dgEvents.Items.SortDescriptions.Clear();
            // Созадем описание сортировки
            dgEvents.Items.SortDescriptions.Add(new SortDescription(dgEvents.Columns[0].SortMemberPath, ListSortDirection.Descending));

            // Очищаем сортировку всех столбцов
            foreach (var col in dgEvents.Columns)
            {
                col.SortDirection = null;
            }
            // Задаем сортировку времени по убыванию (последняя запись вверху)
            dgEvents.Columns[0].SortDirection = ListSortDirection.Descending;
            // Обновляем записи
            dgEvents.Items.Refresh();
于 2016-11-03T06:20:53.757 に答える
0

ICollectionViewを使用して、データグリッド内の項目をフィルター処理、並べ替え、およびグループ化できます。

編集:並べ替えを追加し、質問を注意深く読んでいませんでした:)

 var view = CollectionViewSource.GetDefaultView(this.MyData);
 view.Filter = ViewFilter;
 view.SortDescriptions.Add(new SortDescription("MyPropertyToSort", ListSortDirection.Descending));


    private bool ViewFilter(object obj)
    {
        var item = obj as MyObject;

        if (item == null)
            return false;

        //your filter logik goes here

        if(item.MyStringProp.StartsWith("Test"))
            return false;

        return true;


   }
于 2013-06-06T07:55:22.140 に答える