HOW TO: Use the ItemDataBound Event of Web Forms List Controls in Visual C# .NET

Article translations Article translations
Article ID: 317582 - View products that this article applies to.
This article was previously published under Q317582
Expand all | Collapse all

On This Page

SUMMARY

This step-by-step article describes how to use the ItemDataBound event of the Web Forms DataGrid, DataList, and Repeater controls to perform special processing on individual rows of data that are displayed in a data-bound list control.

Description of the Technique

When you display a list of items in a data-bound list control, you may want to apply conditional logic to display different information, or to apply different formatting, to different items. You can use the ItemDataBound event to apply this logic because each individual row of data is processed and displayed.

Requirements

The following list outlines the recommended hardware, software, network infrastructure, and service packs that are required:
  • Microsoft Visual Studio .NET installed on a compatible Microsoft Windows operating system
  • An available instance of Microsoft Internet Information Services 5.0 or later with the Microsoft .NET Framework installed
This article assumes that you are familiar with the following topics:
  • The Microsoft Visual C# .NET language
  • Microsoft ASP.NET Web forms
  • ADO.NET data access

Design the Web Form

  1. Start Visual Studio .NET, and then create a new Microsoft Visual C# ASP.NET Web application.
  2. Change the pageLayout property of the Web Form to FlowLayout.
  3. Drag a Repeater control from the Web Form toolbox to the form.
  4. Switch from Design view to HTML view by right-clicking the Design window, and then clicking View HTML Source.
  5. Insert the following text between the opening and closing <asp:Repeater> and </asp:Repeater> tags to display Repeater items in a bulleted list:
      <HeaderTemplate><ul></HeaderTemplate>
      <ItemTemplate>
        <li> 
          <asp:Label ID="lblContactName" runat=server ForeColor=Blue
            text='<%# DataBinder.Eval(Container.DataItem, "ContactName")%>'>
          </asp:Label>
        </li>
      </ItemTemplate>
      <FooterTemplate></ul></FooterTemplate>
    					

Load the Data

  1. Switch to the "code behind" module (WebForm1.aspx.cs) by right-clicking WebForm1.aspx in Solution Explorer, and then clicking View Code.
  2. Add the following statements at the top of the code module:
    using System.Data.SqlClient;
    using System.Data.Common; 
    					
  3. Add code in the Page_Load event to retrieve the list of customers from the sample Northwind database to a SqlDataReader object, and then bind the Repeater control to the DataReader. Modify the connection string as necessary in the code that follows to connect to an available SQL Server:
      SqlConnection cn  = new SqlConnection("Data Source=(local);Initial   Catalog=Northwind;User ID=user;Password=password");
      cn.Open();
      SqlCommand cmd = new SqlCommand("SELECT * FROM Customers", cn);
      SqlDataReader dr = cmd.ExecuteReader();
      Repeater1.DataSource = dr;
      Repeater1.DataBind();
    					
  4. Run the project. A bulleted list of contact names from the Northwind Customers list is displayed on the page. Each contact name is formatted in blue by default.

Handle the ItemDataBound Event

  1. Switch back to HTML view for the Web Form. Add the following attribute in the opening <asp:Repeater> tag to specify an event handler for the ItemDataBound event:
    OnItemDataBound="FormatRepeaterRow"
    					
  2. Switch back to Code view, and then add the following event handler procedure:
    protected void FormatRepeaterRow(Object sender, RepeaterItemEventArgs e)
    {
         if( (e.Item.ItemType == ListItemType.Item) || ( e.Item.ItemType == ListItemType.AlternatingItem)) 
         {
         DbDataRecord dbr = (DbDataRecord)e.Item.DataItem;
         if( Convert.ToString(DataBinder.Eval(dbr, "Country")) == "USA" )
             ((Label)e.Item.FindControl("lblContactName")).ForeColor = System.Drawing.Color.Red;
         }          
    }
    					
  3. Run the project again. Contacts from the United States (typically 13 of the 91 customers) are displayed in red because of the conditional formatting code in the ItemDataBound event handler.

Troubleshooting

  • If the data source is a DataReader object, you must cast e.Item.DataItem as type DBDataRecord (from System.Data.Common) in the event handler. If the data source is a DataTable object, you must cast e.Item.DataItem as type DataRowView.
  • Even if you have not created an <AlternatingItemTemplate> in your Repeater control, every other row still has an ItemType of ListItemType.AlternatingItem. Therefore, you must check for both ListItemType.Item and ListItemType.AlternatingItem to process every row.

REFERENCES

For additional information, click the article number below to view the article in the Microsoft Knowledge Base:
307860 INFO: ASP.NET Data Binding Overview

Properties

Article ID: 317582 - Last Review: September 4, 2003 - Revision: 2.2
APPLIES TO
  • Microsoft Visual Studio .NET 2002 Professional Edition
  • Microsoft Visual Studio .NET 2003 Professional Edition
Keywords: 
kbhowtomaster KB317582

Give Feedback

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com