2012-11-15 46 views
10

Tôi đang sử dụng Bảng dữ liệu WPF trong ứng dụng của tôi nơi cột có thể được sắp xếp bằng cách nhấp vào tiêu đề.WPF Datagrid: Xóa phân loại cột

Tôi đã tự hỏi liệu có cách nào để xóa phân loại cột một cách có lập trình không?

Tôi đã cố gắng sắp xếp một cột và sau đó xóa MyDataGrid.Items.SortDescriptions, nhưng bộ sưu tập đó trống (mặc dù một cột đã được sắp xếp).

Tôi cũng đã cố gắng:

MyDataGridColumn.SortDirection = null; 

Vấn đề là những dấu hiệu cho thấy cột đã biến mất, nhưng phân loại vẫn xảy ra khi chỉnh sửa một tế bào và chuyển hàng.

Không có cách nào để xóa loại cột?

Chỉnh sửa (để rõ ràng): Vấn đề là tôi muốn cho phép sắp xếp lại nếu người dùng nhấp lại vào cùng một tiêu đề cột, vì vậy việc đặt CanUserSort thành false sẽ là vấn đề, ngay cả khi nó được thực hiện trong XAML. Tóm lại, những gì tôi đang cố gắng làm là ngăn chặn các hàng bị sắp xếp khi một cột được sắp xếp có một ô đã được sửa đổi. Tôi muốn buộc người dùng phải nhấp lại vào tiêu đề.

+0

Tôi không biết nó sẽ nghỉ khi bạn chỉnh sửa hàng. – Paparazzi

+0

@Blam Đúng vậy. Nếu bạn chọn một hàng khác, ô đã được chỉnh sửa sẽ có hàng được sắp xếp. –

+0

Xóa khỏi CollectionView ví dụ: http://stackoverflow.com/questions/5401912/how-to-remove-wpf-grid-sort-arrow-after-clearing-sort-descriptions – Vibes

Trả lời

4

Đặt CanUserSort-false cho tất cả các cột -

foreach (var a in MyDataGrid.Columns) 
{ 
    a.CanUserSort = false; 
} 
+0

Điều này sẽ không ngăn các cột được sắp xếp lại? Tôi chỉ đang tìm cách xóa phân loại cho một cột cụ thể, không tắt tính năng này cho tất cả các cột. –

+0

Vì vậy, không phải là những gì bạn muốn? –

+0

Bạn không thể đặt cho các cột cụ thể đó trong thuộc tính xaml thành false? –

-2

Trong đoạn mã XAML của DataGrid bạn có thể thêm CanUserSortColumns = "False". Sau đó, noboady sẽ có thể sắp xếp bất kỳ cột nào vào lúc đó.

+0

Nó đã được đề cập trong câu hỏi rằng kỹ thuật này không phù hợp. – Ren

+0

@Ren - Đây là một snipet mã nhỏ để vô hiệu hóa việc sắp xếp DataGridView. for (int i = 0; i Vaibhav

-2

Đây là đoạn mã nhỏ để tắt phân loại DataGridView.

for (int i = 0; i < dataGridView1.ColumnCount; i++) 
{ 
    dataGridView1.Columns[i].SortMode = DataGridViewColumnSortMode.NotSortable; 
} 
+0

Nếu bạn đọc câu hỏi, bạn sẽ thấy rằng đây không phải là điều tác giả muốn. Anh ta muốn ngăn tự động phân loại cột khi người dùng thực hiện chỉnh sửa cho các ô nhưng anh ấy muốn sắp xếp bật để người dùng vẫn có thể nhấp vào tiêu đề cột để sắp xếp bảng nếu họ muốn. – Ren

10

Dưới đây là những gì bạn cần:

using System.Windows.Data; 
using System.ComponentModel; 

ICollectionView view = CollectionViewSource.GetDefaultView(grid.ItemsSource); 
if (view != null) 
{ 
    view.SortDescriptions.Clear(); 
    foreach (DataGridColumn column in grid.Columns) 
    { 
     column.SortDirection = null; 
    } 
} 

nguồn gốc: https://stackoverflow.com/a/9533076/964053

Những gì tôi muốn biết là những gì là M $ suy nghĩ vì đã không đưa một phương pháp ClearSort() ...

1

Trong XAML, bạn có thể tắt tính năng này bằng mã này.

<DataGridTextColumn Header="Header Name" CanUserSort="False"/> 
Các vấn đề liên quan