Displaying Data with GridView and Repeater
ASP.NET Web Forms ships two very different data controls for rendering collections on a page: GridView, a rich, table-oriented control with built-in paging, sorting, and editing, and Repeater, a bare templated control that renders exactly the markup you write and nothing else. Both bind to any object that implements IEnumerable, such as a DataTable, a List<T>, or the results of a LINQ query, and both push their output into the page during the render phase of the page lifecycle.
Cricket analogy: Choosing GridView over Repeater is like choosing a full scorecard app that auto-tallies overs and strike rates versus a scorer's plain notebook where you write only the runs per ball yourself, MS Dhoni style minimal notes.
The GridView Control
A GridView is declared with asp:GridView and typically bound in code-behind by setting its DataSource property to a data collection and calling DataBind(). Columns can be auto-generated from the source's public properties via AutoGenerateColumns="true", or explicitly defined with BoundField, TemplateField, and CommandField elements inside a Columns collection, giving control over headers, formatting strings, and edit/delete buttons.
Cricket analogy: AutoGenerateColumns is like letting a broadcast graphics engine automatically pull every stat field for a player, while explicit BoundField columns are the producer manually choosing to show only strike rate and boundaries for a Virat Kohli innings.
GridView also supports built-in paging, sorting, and inline editing when the right properties and events are wired up: setting AllowPaging="true" with PageSize triggers the PageIndexChanging event, AllowSorting="true" raises Sorting, and enabling edit CommandFields raises RowEditing, RowUpdating, and RowCancelingEdit, each of which the developer handles in code-behind to re-bind the data source appropriately.
Cricket analogy: PageIndexChanging is like flipping to the next page of an over-by-over commentary log, while Sorting is re-ordering the batting scorecard by strike rate instead of by batting order, both requiring the app to refetch and redisplay.
<asp:GridView ID="gvEmployees" runat="server" AutoGenerateColumns="false"
AllowPaging="true" PageSize="10" AllowSorting="true"
OnPageIndexChanging="gvEmployees_PageIndexChanging"
OnSorting="gvEmployees_Sorting"
OnRowEditing="gvEmployees_RowEditing"
OnRowUpdating="gvEmployees_RowUpdating">
<Columns>
<asp:BoundField DataField="EmployeeId" HeaderText="ID" SortExpression="EmployeeId" ReadOnly="true" />
<asp:BoundField DataField="FullName" HeaderText="Name" SortExpression="FullName" />
<asp:TemplateField HeaderText="Salary">
<ItemTemplate>
<%# Eval("Salary", "{0:C}") %>
</ItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="true" ShowDeleteButton="true" />
</Columns>
</asp:GridView>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindGrid();
}
}
private void BindGrid()
{
gvEmployees.DataSource = EmployeeRepository.GetAll();
gvEmployees.DataBind();
}
protected void gvEmployees_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
gvEmployees.PageIndex = e.NewPageIndex;
BindGrid();
}
</script>The Repeater Control
Repeater has no built-in UI beyond what you supply: it exposes HeaderTemplate, ItemTemplate, AlternatingItemTemplate, SeparatorTemplate, and FooterTemplate, and it renders none of its own HTML wrapper, which makes it the right choice when you need a bulleted list, a card grid built with div elements, or any layout that a table-based GridView cannot express cleanly. Because it has no paging, sorting, or editing support out of the box, any of those behaviors must be hand-built by the developer, typically by re-querying and re-binding the data source with the desired page or sort applied.
Cricket analogy: Repeater's ItemTemplate is like a fan making their own scorecard app from scratch, choosing to render each ball as a custom colored dot instead of using the official broadcaster's fixed table layout.
Because Repeater emits only what you put in its templates, it typically produces smaller page output and renders faster than an equivalent GridView, which is one reason it's favored for public-facing, high-traffic listing pages such as product catalogs or blog post lists.
Choosing Between GridView and Repeater
The practical decision usually comes down to how much built-in behavior you need versus how much markup control you need: GridView is the faster path for internal admin screens where sortable, editable tabular data matters more than pixel-perfect design, while Repeater is preferred for customer-facing pages where a designer-provided HTML/CSS layout must be followed exactly and paging or sorting, if needed, can be implemented manually against the data source.
Cricket analogy: Picking GridView for an admin screen is like using the official BCCI scoring software for match officials, while picking Repeater for a fan site is like hand-coding a custom scoreboard widget that matches a specific team's brand colors.
- GridView renders a full HTML table with built-in paging, sorting, and editing support out of the box.
- Repeater renders only the markup you define in its templates, giving full layout control but no built-in behaviors.
- GridView columns can be auto-generated or explicitly defined using BoundField, TemplateField, and CommandField.
- AllowPaging, AllowSorting, and edit CommandFields wire GridView to PageIndexChanging, Sorting, RowEditing, and RowUpdating events.
- Repeater exposes HeaderTemplate, ItemTemplate, AlternatingItemTemplate, SeparatorTemplate, and FooterTemplate for full markup control.
- Repeater typically produces lighter page output than GridView, making it a common choice for high-traffic public pages.
- Choose GridView for admin/internal tabular data needing quick built-in editing; choose Repeater for pixel-precise, designer-driven layouts.
Practice what you learned
1. Which method must be called after setting a GridView's DataSource property for the data to actually render?
2. Which GridView column type is used to render arbitrary custom markup, such as a formatted currency value inside an Eval() expression?
3. What is the main reason developers choose Repeater over GridView for a public-facing product listing page?
4. Which event must be handled to implement paging when AllowPaging is set to true on a GridView?
5. Which Repeater template renders content once between each pair of items, commonly used for a comma or divider?
Was this page helpful?
You May Also Like
Validation Controls
Explore how ASP.NET Web Forms validator controls enforce input rules on both the client and the server before data is processed.
Data Binding in Web Forms
Understand how Web Forms server controls bind to data sources, the difference between declarative and programmatic binding, and when to use Repeater, GridView, or ListView.
Master Pages
Understand how ASP.NET Web Forms master pages provide a shared, reusable layout that individual content pages fill in via ContentPlaceHolder regions.
ADO.NET Basics
Learn how Classic ASP.NET Web Forms applications connect to and query relational databases using ADO.NET's connection, command, and disconnected DataSet objects.
Related Reading
Related Study Notes in Microsoft Technologies
Browse all study notesWindows 10 / UWP Development Study Notes
.NET · 30 topics
Microsoft TechnologiesWindows Batch Scripting Study Notes
Batch · 30 topics
Microsoft TechnologiesMFC (Microsoft Foundation Classes) Study Notes
C++ · 30 topics
Microsoft TechnologiesSilverlight Study Notes
.NET · 30 topics
Microsoft TechnologiesXAML Study Notes
.NET · 30 topics
Microsoft TechnologiesWPF (Windows Presentation Foundation) Study Notes
.NET · 30 topics