2010-09-30 22 views
5

Tôi có một DataTable với 10 hàng nói một trong các cột được đánh số ngẫu nhiên từ 1 đến 10. Tôi muốn sắp xếp chúng. thông thường, tôi thực hiện điều này:Chọn N hàng đầu SAU phân loại từ Dataview trong C#

DataView Dv = new DataView(dtPost, "", "views desc", DataViewRowState.Unchanged); 
repeater.DataSource = Dv; 
repeater.DataBind(); 

Bây giờ, tôi chỉ muốn ràng buộc 5 hàng trên cùng trong Dataview này. Nếu tôi thử điều này:

DvPopBlogs.Table.Rows.Cast<System.Data.DataRow>().Take(5); 

OR 

DvPopBlogs.Table.AsEnumerable().Take(5); //this usually works if sorting wasnt necessary 

Nó hoạt động, nhưng dataView hoàn toàn quên về việc sắp xếp và chỉ chọn 5 hàng từ trên cùng.

Tôi cũng đã thử nó với tất cả DataViewRowStates. Làm cách nào để chọn 5 hàng đầu sau khi sắp xếp?

Tôi dường như đã hết ý tưởng! vui lòng trợ giúp!

Trả lời

4

Bạn đang truy cập vào DataView, nhưng sau đó yêu cầu Table nó bị ràng buộc - bản thân bảng không được sắp xếp, các DataView cung cấp một sắp xếp "xem" của bảng.

Vì vậy, cố gắng (cảnh báo drycode!)

DvPopBlogs.DataViewRows.Take(5) 

Để có được 5 (trong thứ tự sắp xếp) DataViewRows đầu tiên. Nếu bạn muốn DataRows:

DvPopBlogs.DataViewRows.Take(5).Select(dvr => dvr.Row) 

Đó là hoàn toàn có thể điều tra viên từ DataView là bộ sưu tập DataViewRows, vì vậy bạn có thể chỉ cần sử dụng DvPopBlogs.Take(5).... nếu bạn muốn.

+0

yea, tôi thấy điều này khi tôi cố gắng gỡ lỗi, dataview dường như đã sắp xếp thứ tự nhưng ngay sau khi tôi thêm Bảng, thứ tự sắp xếp bị mất, giờ tôi hiểu bảng là dữ liệu gốc. cảm ơn. Nhưng, DvPopBlogs là một DataView và nó không có phương thức .Take() hoặc .DataViewRows()! – iamserious

+0

Hãy thử hoặc dvPopBlogs.AsEnumerable() Hãy, hoặc trong trường hợp xấu nhất dvPopBlogs.ToTable() Sau này sẽ tạo ra một DataTable mới từ nội dung của khung nhìn. –

+0

Xin chào, xin lỗi, nếu tôi sử dụng .ToTable() phương pháp lặp lại là phàn nàn (trên ràng buộc) mà cột nhất định không tồn tại. Gỡ lỗi cho thấy rằng nó tồn tại, có thể tôi đang làm một cái gì đó sai và tôi chắc chắn bạn không thể tìm ra mà không có mã hoàn chỉnh. Bạn đề nghị tôi làm gì bây giờ? Cảm ơn và xin lỗi vì đã đặt quá nhiều câu hỏi! – iamserious

1

Vì bạn đang truyền đến danh sách chung, tại sao không truyền dữ liệu thay vì dữ liệu có thể định dạng?

IEnumerable<DataRow> sortedRows = DvPopBlogs.Cast<DataRowView>().Take(5).Select(r => r.Row); 
+0

Xin chào, nó vẫn ném cùng một lỗi, rằng một trong những cột không tồn tại! Tôi đã cố gắng để gỡ lỗi nó và tôi có thể thấy rõ ràng cột, tuy nhiên, trên databind nó ném lỗi này! – iamserious

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