Microsoft KB Archive/317429

= How To Use the ItemDataBound Event of Web Forms List Controls in Visual Basic .NET =

Article ID: 317429

Article Last Modified on 5/23/2005

-

APPLIES TO


 * Microsoft Visual Studio .NET 2003 Enterprise Architect
 * Microsoft Visual Studio .NET 2003 Enterprise Developer
 * Microsoft Visual Studio .NET 2003 Academic Edition
 * Microsoft Visual Studio .NET 2002 Professional Edition
 * Microsoft Visual Studio .NET 2002 Enterprise Architect
 * Microsoft Visual Studio .NET 2002 Enterprise Developer
 * Microsoft Visual Studio .NET 2002 Academic Edition

-



This article was previously published under Q317429



For a Microsoft Visual C# .NET version of this article, see 317582.

IN THIS TASK
SUMMARY
 * Description of the Technique
 * Requirements
 * Design the Web Form
 * Load the Data
 * Handle the ItemDataBound Event
 * Troubleshooting



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.

back to the top

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 as each individual row of data is processed and displayed.

back to the top

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 (IIS) 5.0 or later with Microsoft .NET Framework installed

This article assumes that you are familiar with the following topics:
 * Microsoft Visual Basic .NET
 * ASP.NET web forms
 * ADO.NET data access

back to the top

Design the Web Form
 Start Visual Studio .NET, and then create a new Visual Basic ASP.NET Web application. Change the pageLayout property of the Web Form to FlowLayout. Drag a Repeater control from the toolbox to the form. Switch from Design view to HTML view.  Between the opening and closing  and  tags, insert the following code to display Repeater items in a bulleted list: <ul></HeaderTemplate> <ItemTemplate>  <asp:Label ID=&quot;lblContactName&quot; runat=server ForeColor=Blue text='<%# Container.DataItem(&quot;ContactName&quot;)%>'> </asp:Label> </li> </ItemTemplate> <FooterTemplate></ul></FooterTemplate> </li></ol>

back to the top

Load the Data
<ol> Switch to the &quot;code behind&quot; module (WebForm1.aspx.vb).</li>  Add the following statements at the top of the code module: Imports System.Data.SqlClient Imports System.Data.Common </li>  Add code in the Page_Load event to retrieve the list of customers from the sample Northwind database into a SqlDataReader object. Bind the Repeater control to the DataReader. Adjust the connection string that is listed in the following code to connect to an available SQL Server: Dim cn As SqlConnection = New SqlConnection(&quot;Data Source=(local);&quot; & _     &quot;Initial Catalog=Northwind;User ID=user;Password=password&quot;) cn.Open Dim cmd As SqlCommand = New SqlCommand(&quot;SELECT * FROM Customers&quot;, cn) Dim dr As SqlDataReader = cmd.ExecuteReader Repeater1.DataSource = dr Repeater1.DataBind </li> 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.</li></ol>

back to the top

Handle the ItemDataBound Event
<ol>  Switch back to HTML view for the Web Form. In the opening  tag, add the following attribute to set an event handler for the ItemDataBound event: OnItemDataBound=&quot;FormatRepeaterRow&quot; </li>  Switch back to Code view, and then add the following event handler procedure: Protected Sub FormatRepeaterRow(ByVal sender As Object,   ByVal e As RepeaterItemEventArgs) If e.Item.ItemType = ListItemType.Item Or _ e.Item.ItemType = ListItemType.AlternatingItem Then Dim dbr As DbDataRecord = CType(e.Item.DataItem, DbDataRecord) If Not IsDBNULL(dbr(&quot;Country&quot;)) AndAlso dbr(&quot;Country&quot;) = &quot;USA&quot; Then CType(e.Item.FindControl(&quot;lblContactName&quot;), Label).ForeColor = _ System.Drawing.Color.Red End If End If End Sub </li> Run the project again. Contacts from the United States (13 of the 91 customers) are displayed in red because of the conditional formatting code that is contained in the ItemDataBound event handler.</li></ol>

back to the top

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, you must cast e.Item.DataItem as type DataRowView.
 * Even if you have not created an <AlternatingItemTemplate> entry in your Repeater control, every other row still has an ItemType value of ListItemType.AlternatingItem. Therefore, you must look for both ListItemType.Item and ListItemType.AlternatingItem to process every row.

back to the top

<div class="references_section">