100% Free Forever
AI-Powered Learning
Industry Expert Content
Certificates & Badges
Learn At Your Own Pace
.NET Framework

Data Controls: GridView and Repeater

Learn how ASP.NET Web Forms renders bound data using the feature-rich GridView control and the fully customizable Repeater control.

Web Forms ControlsIntermediate10 min readJul 10, 2026
Analogies

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.

aspx-csharp
<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

Was this page helpful?

Topics covered

#NETFramework#ClassicASPNETWebFormsWebPagesStudyNotes#MicrosoftTechnologies#DataControlsGridViewAndRepeater#Data#Controls#GridView#Repeater#StudyNotes#SkillVeris