Repeater, ListView, DataList, DataGrid, GridView …จะเลือกแบบไหนดี?


111

การควบคุมที่แตกต่างกันมากมายให้เลือก! แนวทางปฏิบัติที่ดีที่สุดในการพิจารณาว่าจะใช้การควบคุมใดในการแสดงข้อมูลใน ASP.NET คืออะไร


2
คำถามนี้มีเพียงคำตอบเดียวเท่านั้น: ขึ้นอยู่กับ คุณพยายามจะทำอะไร?
Tomalak

@Tomalak ฉันแค่แสดงรายการข้อมูล ... ปกติฉันแค่ใช้ Repeater แต่อยากเห็นข้อดี / ข้อเสียของการใช้ตัวอื่น ๆ
mattruma

คำตอบ:


144

มันเกี่ยวกับสิ่งที่คุณพยายามจะบรรลุ

  • Gridview - มีข้อ จำกัด ในการออกแบบทำงานเหมือนตาราง html เพิ่มเติมในฟังก์ชันที่สร้างขึ้นเช่นแก้ไข / อัปเดตหน้าจัดเรียง ค่าใช้จ่ายมากมาย

  • DataGrid - Gridview เวอร์ชันเก่า Gridview คือ super datagrid

  • Datalist - Gridview เวอร์ชันที่ปรับแต่งได้มากขึ้น นอกจากนี้ยังมีค่าใช้จ่ายบางส่วน ทำงานด้วยตนเองมากขึ้นเนื่องจากคุณต้องออกแบบเอง

  • ListView - Datalist ใหม่ :) เกือบจะเป็นไฮบริดของ datalist และ gridview ที่คุณสามารถใช้เพจจิ้งและสร้างใน Gridview เหมือนกับฟังก์ชันการทำงาน แต่มีอิสระในการออกแบบ หนึ่งในตัวควบคุมใหม่ในตระกูลนี้

  • Repeater - น้ำหนักเบามาก ไม่มีฟังก์ชันในตัวเช่นส่วนหัวส่วนท้าย มีค่าใช้จ่ายน้อยที่สุด


12
คำตอบนี้ยังคงเป็นปัจจุบันอยู่หรือไม่ (ตั้งแต่ปี 2008 และปี 2013)
Michel Ayres

3
@Michel Repeater ถูกพิมพ์อย่างรุนแรงตั้งแต่. NET 4.5 ฉันชอบที่นั่นมาก
Evgeni Nabokov

1
@MichelAyres ฉันจะตอบว่าใช่โดยทั่วไป แม้ว่า MS จะทำการอัปเดตเว็บฟอร์มตั้งแต่ปี 2008 แต่แนวคิดทั่วไปที่แสดงในคำตอบก็เหมือนกัน
akousmata

2
อืม .. "ไม่มีฟังก์ชันในตัวเช่นส่วนหัวส่วนท้าย" มี HeaderTemplate และ FooterTemplate .. ถ้าคุณต้องการใส่สิ่งต่างๆเช่นแท็ก <table> และ </table> ของคุณ
โฆษณา

28

ทุกคนตีมัน: ขึ้นอยู่กับ

ตอนนี้สำหรับคำแนะนำเฉพาะบางอย่าง (ขยายจากคำตอบที่ยอดเยี่ยมของ WebDude ด้านบน) ...

การออกแบบของคุณเข้ากับสเปรดชีตธรรมชาติหรือมุมมองตารางของข้อมูลหรือไม่ GridView

คุณจำเป็นต้องแสดงรายการหรือมุมมองข้อมูลที่จัดรูปแบบอื่น ๆ โดยอาจมีส่วนหัวและส่วนท้ายและอาจมีการควบคุมและ / หรือการจัดรูปแบบเฉพาะสำหรับแต่ละระเบียนข้อมูลหรือไม่ (เช่นลิงก์ที่กำหนดเองอาจเป็น LinkButtons หรือตัวควบคุมการแก้ไขเฉพาะ) การแสดงผลนี้ไม่พอดีกับมุมมองสเปรดชีตหรือตารางโดยเฉพาะหรือไม่? ListView

หากคุณมีคุณสมบัติตามเกณฑ์ทั้งหมดของ ListView แต่คุณตามธรรมชาติจะพอดีในตารางคุณอาจพิจารณาDataList

ฉันไปหาRepeaterเมื่อฉันต้องการข้อมูลพื้นฐานที่วนซ้ำด้วยบิตการออกแบบที่กำหนดเองไม่มีส่วนหัวไม่มีส่วนท้ายดีและสะอาด


19

มุมมองมาร์กอัป

การประกาศโค้ดตัวอย่างต่อไปนี้เป็นไปได้สำหรับทั้ง 3 (ListView, DataList, Repeater)

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

ในรายการต่อไปนี้คุณสามารถดูเทมเพลตและตัวเลือกที่ใช้ได้สำหรับแต่ละเทมเพลตและดูความแตกต่างด้วยตัวคุณเอง

ListView (สังเกตการแก้ไขกลุ่มแทรกเค้าโครง)

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

DataList (สังเกตคู่สไตล์)

  • AlternatingltemStyle
  • AlternatingltemTemplate
  • EditltemStyle
  • EditltemTemplate
  • FooterStyle
  • FooterTemplate
  • HeaderStyle
  • HeaderTemplate
  • ItemStyle
  • ItemTemplate
  • SelectedltemStyle
  • SelectedltemTemplate
  • SeparatorStyle
  • SeparatorTemplate

ทบทวน

  • AlternatingltemTemplate
  • FooterTemplate
  • HeaderTemplate
  • ItemTemplate
  • SeparatorTemplate

มุมมองโค้ด (มุมมองขั้นสูง)

CompositeDataBoundControl :

ดูลำดับชั้นของคลาสต่อไปนี้ (และตัวควบคุมที่เกี่ยวข้อง)

การควบคุมเหล่านี้โฮสต์ตัวควบคุม asp.net อื่น ๆ ในเทมเพลตเพื่อแสดงข้อมูลที่ถูกผูกไว้ให้กับผู้ใช้

คลาส CompositeDataBoundControl (และตัวควบคุมที่เกี่ยวข้อง)

คำอธิบายบางส่วนเพื่อการชี้แจงที่ดีขึ้น

การควบคุม ListView

ตัวควบคุม ListView ยังใช้เทมเพลตสำหรับการแสดงข้อมูล อย่างไรก็ตามสนับสนุนเทมเพลตเพิ่มเติมจำนวนมากที่ช่วยให้สามารถใช้งานได้มากขึ้นเมื่อทำงานกับข้อมูลของคุณ แม่แบบเหล่านี้รวมถึงLayoutTemplate, GroupTemplate, ItemSeparatorTemplate

ตัวควบคุม ListView ( ไม่เหมือนกับ DataList และ Repeater ) ยังสนับสนุนความสามารถในการแก้ไขแทรกและลบข้อมูลโดยปริยายโดยใช้ตัวควบคุมแหล่งข้อมูล คุณสามารถกำหนดแต่ละเทมเพลตสำหรับแต่ละสถานการณ์เหล่านี้

การควบคุม DataList

ตัวควบคุม DataList ทำงานเหมือนกับตัวควบคุมRepeater ข้อมูลซ้ำสำหรับแต่ละแถวในชุดข้อมูลของคุณและจะแสดงข้อมูลนี้ตามเทมเพลตที่คุณกำหนด อย่างไรก็ตามมันวางข้อมูลที่กำหนดไว้ในเทมเพลตภายในโครงสร้าง HTML ต่างๆ ซึ่งรวมถึงตัวเลือกสำหรับเค้าโครงแนวนอนหรือแนวตั้งและยังช่วยให้คุณกำหนดวิธีการทำซ้ำข้อมูลเป็นโฟลว์หรือเค้าโครงตาราง

ตัวควบคุม DataList ไม่ใช้ตัวควบคุมแหล่งข้อมูลโดยอัตโนมัติเพื่อแก้ไขข้อมูล แต่จะจัดเตรียมเหตุการณ์คำสั่งซึ่งคุณสามารถเขียนโค้ดของคุณเองสำหรับสถานการณ์เหล่านี้ได้ ในการเปิดใช้งานเหตุการณ์เหล่านี้คุณเพิ่มปุ่มควบคุมลงในเทมเพลตและตั้งค่าคุณสมบัติ CommandName ของปุ่มเพื่อแก้ไขลบอัปเดตหรือยกเลิกคำสำคัญ จากนั้นเหตุการณ์ที่เหมาะสมจะถูกยกขึ้นโดยตัวควบคุม DataList

การควบคุม Repeater

ตัวควบคุม Repeater ยังใช้เทมเพลตเพื่อกำหนดการเชื่อมโยงแบบกำหนดเอง อย่างไรก็ตามจะไม่แสดงข้อมูลเป็นแต่ละระเบียน แต่จะทำซ้ำแถวข้อมูลตามที่คุณระบุในเทมเพลตของคุณ วิธีนี้ช่วยให้คุณสามารถสร้างข้อมูลแถวเดียวและทำซ้ำในหน้าของคุณ

ตัวควบคุม Repeater เป็นเทมเพลตแบบอ่านอย่างเดียว นั่นคือรองรับเฉพาะ ItemTemplate ไม่สนับสนุนการแก้ไขแทรกและลบโดยปริยาย คุณควรพิจารณาการควบคุมอื่น ๆ อย่างใดอย่างหนึ่งหากคุณต้องการฟังก์ชันนี้มิฉะนั้นคุณจะต้องเขียนโค้ดนี้ด้วยตัวคุณเองสำหรับการควบคุม Repeater


คำอธิบายข้างต้นมาจากMCTS 70-515 สอบการใช้งานเว็บพัฒนากับ Microsoft.NET 4 Frameworkหนังสือ

DataGrid ไม่ได้กล่าวถึงในหนังสือเล่มนี้และถูกแทนที่ด้วย GridViews ยอดนิยมและตอบรับอย่างดีจากผู้ใช้รายอื่น


1
คำอธิบายที่ยอดเยี่ยมสำหรับคำตอบทั้งหมด!
Ali007

ความดีของฉัน ... คำจำกัดความของคำตอบที่สมบูรณ์ ทำได้ดี.
user3308043

6

แน่นอน! ผมเคย blogged กับความแตกต่างระหว่างข้อมูลเครื่องมือ ASP.NET 4.0 โดยทั่วไปแล้ว gridview เป็นวิธีที่มีประสิทธิภาพที่สุดในการนำเสนอข้อมูลแบบตารางในขณะที่การควบคุม ListView ใช้สำหรับการแสดงข้อมูลซ้ำที่ซับซ้อนมากขึ้น หากฉันให้คำแนะนำแก่มือใหม่ ASP.NET ฉันจะบอกให้พวกเขาเรียนรู้ gridview จากภายในและไม่สนใจการควบคุมอื่น ๆ ที่จะเริ่มต้นด้วย


เพียงเพื่อเพิ่มความคิดเห็นในบล็อกของฉันเอง: 2-3 ปีที่ผ่านมาสิ่งที่ฉันแนะนำจริงๆคือการเรียนรู้ ASP.NET MVC แทนซึ่งทำให้คำถามไม่เกี่ยวข้อง (และยังทำให้การเพิ่มเหตุการณ์จากกริดเล็กน้อย) อย่างไรก็ตามมันเป็นช่วงการเรียนรู้ที่ยาวนาน!
Andy Brown

5

ทั้งหมดนี้ขึ้นอยู่กับวิธีที่คุณต้องการจัดวางข้อมูลของคุณ

หากคุณต้องการควบคุมเค้าโครง (เช่นตารางเทียบกับ CSS กับอะไรก็ตาม) เมื่อใช้ Repeater หรือ ListView ระหว่างทั้งสองรายการ ListView ช่วยให้คุณมีกิจกรรมและคำสั่งในตัวมากมายสำหรับการแก้ไขเลือกแทรก นอกจากนี้ฟังก์ชันการเพจและการจัดกลุ่ม Repeater นั้นง่ายมากโดยจะทำโครงร่างซ้ำกับข้อมูล เนื่องจากคุณกำลังสร้างเค้าโครงด้วยมือ Listview และ Repeater จึงต้องใช้รหัสเพิ่มเติม

GridView เป็น DataGrid ที่อัปเดตดังนั้นจึงแทบไม่มีเหตุผลใด ๆ ที่จะใช้ DataGrid GridView ทำงานได้ดีจริงๆเมื่อเชื่อมต่อกับแหล่งข้อมูล ASP.NET มาตรฐาน แต่ จำกัด ให้คุณอยู่ในรูปแบบตารางที่มีกฎการจัดวางจำนวนมาก GridView ต้องการโค้ดน้อยลงเนื่องจากคุณใช้เลย์เอาต์ในตัว

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.