2011-09-07 44 views
8

Tôi có một lưới có nhiều cột và người dùng có thể sắp xếp dựa trên bất kỳ cột nào. Dữ liệu, bị ràng buộc lưới là một tập hợp các thực thể tùy chỉnh. Tôi có một nút in trên màn hình và bấm vào nút này tôi cần phải làm một bản in tùy chỉnh. In phải hiển thị dữ liệu theo thứ tự như được hiển thị trong lưới (với dữ liệu bổ sung)Cách lấy các mục được sắp xếp từ một DataGrid

Có cách nào để trực tiếp nhận nguồn dữ liệu được sắp xếp thay vì sắp xếp nguồn dữ liệu trong sự kiện sắp xếp không?

Cảm ơn Pankaj

Trả lời

5

Có, có. Trong WPF, luôn luôn CollectionView bị ràng buộc, không bao giờ là bộ sưu tập. Nếu bạn không chỉ định chế độ xem bộ sưu tập, chế độ xem mặc định sẽ được sử dụng. Bạn có thể truy cập vào xem bộ sưu tập mặc định này như sau:

CollectionViewSource.GetDefaultView(yourCollectionOfCustomEntities); 

Đây là quan điểm bộ sưu tập được thể hiện bằng lưới với tất cả các phân loại và lọc áp dụng.

+1

Dựa trên câu trả lời của bạn những gì tôi đã hiểu là việc thu thập nguồn sẽ không bao giờ thay đổi và chỉ có CollectionView sẽ được thay đổi (như và khi các loại dữ liệu người dùng trong bất kỳ cột). Để bản in của tôi hoạt động, tôi cần dữ liệu trong biểu mẫu thu thập (Danh sách (các đối tượng)). Vì vậy, chế độ xem bộ sưu tập mặc định sẽ không đủ. Có cách nào dễ dàng để có được bộ sưu tập cũng được sắp xếp dựa trên collectionView đã sắp xếp không? Một điều tôi quan sát được trong khi gỡ lỗi là CollectionView có một thuộc tính được bảo vệ InternalList, có bộ sưu tập được sắp xếp. Nhưng kể từ khi tài sản được bảo vệ tôi không thể có được nó. –

+0

Khi bạn liệt kê chế độ xem bộ sưu tập, các mục sẽ được trả lại theo thứ tự được sắp xếp ... vui lòng kiểm tra –

+0

Có Tôi có thể liệt kê chế độ xem tập hợp và xây dựng bộ sưu tập được sắp xếp. –

2

Bạn cũng có thể chỉ liệt kê thuộc tính Mục của DataGrid của mình. Không giống như thuộc tính ItemsSource, thuộc tính Items xuất hiện để phản ánh chính xác những gì trên màn hình bao gồm sắp xếp và lọc. Ví dụ:

foreach (var item in dataGrid.Items) 
{ 
    // do something 
} 
7

Bạn phải sử dụng yourDataGrid.Items, Items phản ánh chế độ xem hiện tại của lưới. và bạn phải chuyển đổi bằng cách sử dụng phương thức Truyền và sau khi sử dụng .ToList();

tưởng tượng này

List<MyClass> myListOfMyClass = new List<MyClass>(); 
myGrid.ItemSource = myListOfMyClass; 
List<MyClass> myListOfMyClassSortedByTheUser = myGrid.Items.Cast<MyClass>().ToList(); 
+3

Tôi nghĩ đây là câu trả lời tốt hơn câu trả lời được chấp nhận. –

Các vấn đề liên quan