Bộ lặp, ListView, DataList, DataGrid, GridView… Chọn cái nào?


111

Vì vậy, nhiều điều khiển khác nhau để lựa chọn! Các phương pháp hay nhất để xác định điều khiển nào sẽ sử dụng để hiển thị dữ liệu trong ASP.NET?


2
Câu hỏi này chỉ có một câu trả lời chắc chắn: Nó phụ thuộc. Bạn đang cố làm gì vậy?
Tomalak

@Tomalak Tôi chỉ hiển thị một danh sách dữ liệu ... bình thường tôi chỉ sử dụng Bộ lặp nhưng muốn xem ưu / nhược điểm của việc sử dụng những cái khác.
mattruma 26/09/08

Câu trả lời:


144

Nó thực sự là về những gì bạn đang cố gắng đạt được

  • Gridview - Hạn chế về thiết kế, hoạt động giống như một bảng html. Nhiều chức năng được xây dựng như chỉnh sửa / cập nhật, trang, sắp xếp. Rất nhiều chi phí.

  • DataGrid - Phiên bản cũ của Gridview. Chế độ xem lưới là một siêu lưới dữ liệu.

  • Datalist - phiên bản có thể tùy chỉnh nhiều hơn của Gridview. Cũng có một số chi phí. Nhiều công việc thủ công hơn vì bạn phải tự thiết kế.

  • ListView - Datalist mới :). Gần như là sự kết hợp giữa datalist và gridview, nơi bạn có thể sử dụng phân trang và xây dựng trong Gridview giống như chức năng, nhưng có quyền tự do thiết kế. Một trong những điều khiển mới trong gia đình này

  • Bộ lặp - Trọng lượng rất nhẹ. Không có chức năng tích hợp như Headers, Footers. Có chi phí ít nhất.


12
Nó vẫn còn cập nhật câu trả lời này? (kể từ năm 2008 và năm 2013)
Michel Ayres

3
@Michel Repeater được đánh giá mạnh mẽ kể từ .NET 4.5. Tôi thích điều đó rất nhiều.
Evgeni Nabokov

1
@MichelAyres Nói chung tôi sẽ nói có. Mặc dù MS đã thực hiện một số cập nhật cho các biểu mẫu web từ năm 2008, nhưng các ý tưởng chung được truyền đạt trong câu trả lời là giống nhau.
akousmata

2
Hmmm .. "Không có chức năng tích hợp sẵn như đầu trang, chân trang", tốt, có HeaderTemplate và FooterTemplate .. nếu bạn muốn thêm những thứ như thẻ <table> và </table> của mình.
Quảng cáo

28

Mọi người khác đánh nó: Nó phụ thuộc.

Bây giờ để có một số hướng dẫn cụ thể (mở rộng dựa trên câu trả lời tuyệt vời của WebDude ở trên) ...

Thiết kế của bạn có phù hợp với bảng tính tự nhiên hoặc chế độ xem lưới của dữ liệu không? GridView .

Bạn có cần hiển thị danh sách hoặc dạng xem dữ liệu được định dạng khác, có thể với đầu trang và chân trang, và có thể với các điều khiển và / hoặc định dạng cụ thể cho từng bản ghi dữ liệu không? (EG, các liên kết được tùy chỉnh, có thể là LinkButtons hoặc các điều khiển chỉnh sửa cụ thể?) Màn hình này có hiển thị cụ thể không phù hợp một cách tự nhiên với bảng tính hoặc dạng xem lưới không? ListView

Nếu bạn đáp ứng tất cả các tiêu chí của ListView, nhưng bạn sẽ tự nhiên phù hợp với lưới, bạn có thể xem xét DataList .

Tôi chọn Bộ lặp khi tôi chỉ cần một số dữ liệu cơ bản được lặp lại với một số bit thiết kế tùy chỉnh, không có đầu trang, không có chân trang, đẹp và sạch sẽ.


19

Chế độ xem đánh dấu

Có thể khai báo mã mẫu sau cho cả 3 (ListView, DataList, Repeater)

<asp:ListView runat="server" OnItemCommand="Unnamed1_ItemCommand">
<ItemTemplate> <%# Eval("Name")%>    </ItemTemplate>
<asp:ListView>

trong các danh sách sau Bạn có thể xem các mẫu và tùy chọn có sẵn cho từng người trong số họ và tự xem sự khác biệt

ListView (lưu ý chỉnh sửa, nhóm, chèn, bố cục)

  • AlternatingltemTemplate
  • EditltemTemplate
  • EmptyDataTemplate
  • EmptyltemTemplate
  • GroupSeparatorTemplate
  • GroupTemplate
  • lnsertltemTemplate
  • ItemSeparatorTemplate
  • ItemTemplate
  • LayoutTemplate
  • SelectedltemTemplate

DataList (lưu ý các cặp Kiểu)

  • AlternatingltemStyle
  • AlternatingltemTemplate
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • HeaderTemplate
  • ItemStyle
  • ItemTemplate
  • SelectedltemStyle
  • SelectedltemTemplate
  • SeparatorStyle
  • Dấu phân tách

Bộ lặp

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • Dấu phân tách

Chế độ xem mã (chế độ xem nâng cao)

CompositeDataBoundControl :

nhìn vào hệ thống phân cấp các lớp sau (và các điều khiển liên quan).

các điều khiển này lưu trữ các điều khiển asp.net khác trong các mẫu của chúng để hiển thị dữ liệu giới hạn cho người dùng

Các lớp CompositeDataBoundControl (và các điều khiển liên quan)

Một số mô tả để làm rõ hơn

Kiểm soát ListView

Điều khiển ListView cũng sử dụng các mẫu để hiển thị dữ liệu. Tuy nhiên, nó hỗ trợ nhiều mẫu bổ sung cho phép nhiều kịch bản hơn khi làm việc với dữ liệu của bạn. Các mẫu này bao gồm LayoutTemplate, GroupTemplate, ItemSeparatorTemplate .

Điều khiển ListView ( không giống như DataList và Repeater ) cũng hỗ trợ ngầm định khả năng chỉnh sửa, chèn và xóa dữ liệu bằng cách sử dụng điều khiển nguồn dữ liệu. Bạn có thể xác định các mẫu riêng cho từng trường hợp này.

Kiểm soát danh sách dữ liệu

Điều khiển DataList hoạt động giống như điều khiển Bộ lặp . Nó lặp lại dữ liệu cho từng hàng trong tập dữ liệu của bạn và nó hiển thị dữ liệu này theo mẫu đã xác định của bạn. Tuy nhiên , nó đưa ra dữ liệu được xác định trong mẫu trong các cấu trúc HTML khác nhau. Điều này bao gồm các tùy chọn cho bố cục ngang hoặc dọc và nó cũng cho phép bạn đặt cách dữ liệu sẽ được lặp lại, dưới dạng luồng hoặc bố cục bảng.

Điều khiển DataList không tự động sử dụng điều khiển nguồn dữ liệu để chỉnh sửa dữ liệu. Thay vào đó, nó cung cấp các sự kiện lệnh trong đó bạn có thể viết mã của riêng mình cho các tình huống này. Để bật các sự kiện này, bạn thêm điều khiển Nút vào một trong các mẫu và đặt thuộc tính CommandName của nút thành từ khóa chỉnh sửa, xóa, cập nhật hoặc hủy. Sự kiện thích hợp sau đó được nâng lên bởi điều khiển DataList.

Điều khiển bộ lặp

Điều khiển Bộ lặp cũng sử dụng các mẫu để xác định ràng buộc tùy chỉnh. Tuy nhiên, nó không hiển thị dữ liệu dưới dạng các bản ghi riêng lẻ. Thay vào đó, nó lặp lại các hàng dữ liệu như bạn chỉ định trong mẫu của mình. Điều này cho phép bạn tạo một hàng dữ liệu duy nhất và nó lặp lại trên trang của bạn.

Điều khiển Bộ lặp là một mẫu chỉ đọc . Nghĩa là, nó chỉ hỗ trợ ItemTemplate. Nó không hoàn toàn hỗ trợ chỉnh sửa, chèn và xóa. Bạn nên xem xét một trong các điều khiển khác nếu bạn cần chức năng này, nếu không, bạn sẽ phải tự viết mã này cho điều khiển Bộ lặp.


Các mô tả trên là từ cuốn sách MCTS Exam 70-515 Web Applications Development with Microsoft.NET Framework 4 .

DataGrid thậm chí không được đề cập trong cuốn sách này và được thay thế bằng GridViews phổ biến và được những người dùng khác trả lời một cách độc đáo


1
Mô tả tuyệt vời về tất cả các câu trả lời!
Ali007

Chúa ơi ... định nghĩa của một câu trả lời hoàn chỉnh. Làm tốt.
user3308043

6

Thật! Tôi đã viết blog về sự khác biệt giữa các công cụ dữ liệu ASP.NET 4.0 . Về cơ bản, gridview là cách mạnh mẽ nhất để trình bày thông tin dạng bảng, trong khi điều khiển ListView dành cho việc hiển thị dữ liệu lặp lại phức tạp hơn. Nếu tôi đưa ra lời khuyên cho một người mới sử dụng ASP.NET, tôi sẽ yêu cầu họ tìm hiểu các góc nhìn từ trong ra ngoài và bỏ qua các điều khiển khác để bắt đầu.


Chỉ để thêm nhận xét vào blog của riêng tôi: 2-3 năm sau, điều tôi thực sự khuyên bạn nên học ASP.NET MVC thay thế, điều này làm cho câu hỏi không liên quan (và cũng làm cho việc nâng cao sự kiện từ các lưới trở nên tầm thường). Tuy nhiên, đó là một đường cong học tập DÀI!
Andy Brown

5

Tất cả phụ thuộc vào cách bạn muốn bố trí dữ liệu của mình.

Nếu bạn cần kiểm soát bố cục (như bảng so với CSS so với bất cứ thứ gì), hãy sử dụng Bộ lặp hoặc ListView. Giữa cả hai, ListView cung cấp cho bạn nhiều sự kiện hơn và các lệnh tích hợp để chỉnh sửa, chọn, chèn. Ngoài ra, chức năng phân trang và nhóm. Một bộ lặp cực kỳ đơn giản, nó lặp lại một bố cục với dữ liệu. Vì bạn đang xây dựng bố cục bằng tay, Listview và Repeater yêu cầu nhiều mã hơn.

GridView là một DataGrid cập nhật nên hầu như không có lý do gì để sử dụng DataGrid. GridView hoạt động thực sự tốt khi được kết nối với nguồn dữ liệu ASP.NET tiêu chuẩn, nhưng hạn chế bạn ở một bố cục dạng bảng với rất nhiều quy tắc bố cục. GridView yêu cầu ít mã hơn vì bạn đang sử dụng bố cục dựng sẵn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.