2008-10-22 43 views
12

Khi lần đầu tiên tôi tải dữ liệu vào một điều khiển DataGrid Silverlight, làm thế nào tôi có thể làm cho màn hình trông chính xác như thể người dùng vừa mới nhấp vào tiêu đề của cột đầu tiên? Nói cách khác, dữ liệu nên được sắp xếp theo thứ tự tăng dần theo giá trị của cột đó, VÀ mũi tên sắp xếp nhỏ sẽ được hiển thị trong tiêu đề của cột đầu tiên.đặt thứ tự sắp xếp ban đầu trong Silverlight DataGrid?

Giả sử điều đó có thể xảy ra, tôi có thể làm cho nó trông giống như người dùng đã nhấp vào cột đầu tiên và sau đó bấm shift lần thứ hai? Nói cách khác, tôi có thể lập trình áp dụng phân loại hai phần và có màn hình giống như người dùng đã thực hiện nó không?

Trả lời

6

Tôi cũng cần làm điều này, và xem xét kỹ lưỡng việc liệu DataGrid có thể thực hiện điều này hay không.

Có IS trong thực tế, một phương pháp thích hợp trên lớp DataGridColumnHeader, cụ thể là InvokeProcessSort, nhưng nó nội bộ và không nổi lên ở bất kỳ nơi nào khác trong lớp DataGrid.

Tất cả những gì tôi có thể làm là sắp xếp trước dữ liệu ngay trước khi tôi liên kết nó. Tôi đang sử dụng một bộ sưu tập dữ liệu tùy chỉnh thực hiện ICollectionView cũng như ObservableCollection <>, và điều này làm việc OK - nhưng nó không tối ưu, và một tải công việc mà không nhất thiết cần thiết.

Ngoài ra, việc cung cấp bộ sưu tập được sắp xếp trước có nghĩa là lưới không hiển thị điểm đánh dấu sắp xếp.

Tôi sẽ nêu vấn đề này trên trình theo dõi lỗi DataGrid - đây là một thiếu sót khá lớn có thể sửa chữa dễ dàng - MS chỉ cần trưng ra các phương pháp thích hợp trên lớp DataGridColumn và DataGrid.

+0

đoán không cập nhật về vấn đề này chưa? – Coops

10

Đây là giải pháp của tôi:

if (pcv.CanSort == true) 
{ 
     pcv.SortDescriptions.Add(new SortDescription("ProductionStatus", ListSortDirection.Ascending)); 
     pcv.SortDescriptions.Add(new SortDescription("Date", ListSortDirection.Descending)); 
} 

, nơi PCV là một PageCollectionView. Đây là loại đầu tiên bởi tài sản ProductionStatus và sau đó là Thuộc tính ngày. Nó hiển thị mũi tên sắp xếp nhỏ chỉ dành cho cột thứ hai.

+0

Điều đó cũng làm việc cho tôi, cảm ơn bạn! – Masha

+0

Tôi nghĩ rằng điều này đã bị xóa khỏi Silverlight 4 –

+0

Tôi đã sử dụng nó với SL4. – Valentin

4

Tìm thấy một chút bài viết tốt bởi Paul Sherrif mà giải quyết điều này cho chúng ta ...

http://weblogs.asp.net/psheriff/archive/2010/07/14/use-collectionviewsource-in-silverlight.aspx

Về cơ bản chúng tôi đã ràng buộc DataGrid vào một CollectionViewSource anyway. Hóa ra điều này có tập hợp cấu hình CollectionViewSource.SortDescriptions cho phép chúng tôi chỉ định thứ tự sắp xếp mặc định.

Cảm ơn Paul!

1

Chỉ cần thêm một SortDescriptor đến DomainDataSource:

<riaControls:DomainDataSource.SortDescriptors> 
    <riaControls:SortDescriptor PropertyPath="ColumnName" Direction="Descending" /> 
</riaControls:DomainDataSource.SortDescriptors> 
0

Có tồn tại một CollectionViewSource trong Silverlight 3+

http://msdn.microsoft.com/en-us/library/system.windows.data.collectionviewsource(v=vs.95).aspx

Có một cách dễ dàng để xác định trong XAML thứ tự sắp xếp mặc định, theo đề xuất của Microsoft:

Tuyên bố sắp xếp trong đánh dấu bằng cách sử dụng CollectionViewSource

<Window.Resources> 
    <app:MyData x:Key="MyData"/> 
    <CollectionViewSource x:Key="cvs" Source={StaticResource MyData}> 
    <CollectionViewSource.SortDescriptions> 
     <SortDescription Property="Name"/> 
    </CollectionViewSource.SortDescriptions> 
    </CollectionViewSource> 
</Window.Resources> 

<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}"/> 

tìm thấy ở chú thích trong https://connect.microsoft.com/VisualStudio/feedback/details/678782/set-default-sort-order-of-datagrid

Một sự điều chỉnh của tôi để lấy mẫu của Microsoft:

<sort:SortDescription 
    PropertyName="Name" 
    Direction="Ascending" 
    xmlns:sort="clr-namespace:System.ComponentModel;assembly=System.Windows" 
    /> 
Các vấn đề liên quan