Using the Repeater and DataList Controls

Both the Repeater and DataList controls—the subjects of this chapter—enable you to display a set of data items at a time. For example, you can use these controls to display all the rows contained in a database table. The Repeater control is entirely template driven. You can format the rendered output of the control in any way that you please. For example, you can use the Repeater control to display records in a bulleted list, a set of HTML tables, or even in a comma-delimited list.

The DataList control is also template driven. However, unlike the Repeater control, the default behavior of the DataList control is to render its contents into an HTML table. The DataList control renders each record from its data source into a separate HTML table cell.

In this chapter, you learn how to use both of these controls to display database data. You also learn how to use each of the different types of templates that each of the controls supports. Finally, you can see how to handle the different types of events that the controls expose.


Using the Repeater Control
The Repeater control provides you with the maximum amount of flexibility in rendering a set of database records. You can format the output of the Repeater control in any way that you please. In this section, you learn how to display data with the Repeater control and handle Repeater control events.

Displaying Data with the Repeater Control
To display data with the Repeater control, you must create an ItemTemplate. For example, the page in Listing displays the contents of the Movies database table.


The Repeater control in Listing displays each record in a separate HTML <div> tag. A databinding expression is used to display the value of each column. In Listing, declarative databinding is used to bind the Repeater to the SqlDataSource. You also can databind a Repeater control programmatically.

For example, the page in Listing contains a Repeater control that renders a JavaScript array. The Repeater control is programmatically databound to the list of files in the Photos directory.

The page in Listing randomly displays a different photo every five seconds. A random image is selected from the JavaScript array and displayed by the JavaScript showImage() function. An Internet Explorer transition filter is used to create a fade-in effect.

The transition filter is an Internet Explorer–only extension to Cascading Style Sheets. The page still works with Opera 8 and Firefox 1, but you don’t get the fade-in effect.

Using Templates with the Repeater Control
The Repeater control supports five different types of templates:
  • ItemTemplate—Formats each item from the data source.
  • AlternatingItemTemplate—Formats every other item from the data source.
  • SeparatorTemplate—Formats between each item from the data source.
  • HeaderTemplate—Formats before all items from the data source.
  • FooterTemplate—Formats after all items from the data source.

You are required to use only an ItemTemplate; the other types of templates can be used at your own discretion. The order in which you declare the templates in the Repeater control does not matter.

Handling Repeater Control Events
The Repeater control supports the following events:
  • DataBinding—Raised when the Repeater control is bound to its data source.
  • ItemCommand—Raised when a control contained in the Repeater control raises an event.
  • ItemCreated—Raised when each Repeater item is created.
  • ItemDataBound—Raised when each Repeater item is bound.


Using the DataList Control
The DataList control, like the Repeater control, is template driven. Unlike the Repeater control, by default, the DataList renders an HTML table. Because the DataList uses a particular layout to render its content, you are provided with more formatting options when using the DataList control.

In this section, you learn how to use the DataList control to display data. You also learn how to render database records in both single-column and multi-column HTML tables. We also explore how you can edit data with the DataList control.

Displaying Data with the DataList Control
To display data with the DataList control, you must supply the control with an ItemTemplate. The contents of the ItemTemplate are rendered for each data item from the data source.

The RepeatLayout property accepts one of the following two values:
  • Table—Data Items are rendered in HTML table cells.
  • Flow—Data Items are rendered in HTML <span> tags.

Displaying Data in Multiple Columns
You can render the contents of a DataList control into a multi-column table in which each data item occupies a separate table cell. Two properties modify the layout of the HTML table rendered by the DataList control:
  • RepeatColumns—The number of columns to display.
  • RepeatDirection—The direction to render the cells. Possible values are Horizontal and Vertical.

If you set the RepeatDirection property to the value Horizontal and do not assign a value to the RepeatColumns property, then the DataList renders its data items horizontally without end.

You can display data items in multiple columns when the DataList is in Flow layout mode. In that case, <br> tags are used to create the row breaks.



Using Templates with the DataList Control
The DataList control supports all the same templates as the Repeater control:
  • ItemTemplate—Formats each item from the data source.
  • AlternatingItemTemplate—Formats every other item from the data source.
  • SeparatorTemplate—Formats between each item from the data source.
  • HeaderTemplate—Formats before all items from the data source.
  • FooterTemplate—Formats after all items from the data source

In addition, the DataList supports the following templates:
  • EditItemTemplate—Displayed when a row is selected for editing.
  • SelectedItemTemplate—Displayed when a row is selected
Selecting Data with the DataList Control
You can use a DataList control as a menu by taking advantage of the control’s SelectedValue property. For example, the page in Listing enables you to pick a movie category and display a list of matching movies.

Because the LinkButton control’s CommandName property has the value Select, clicking the button changes the value of the DataList control’s SelectedValue property. The DataList control’s SelectedValue property is used by the second SqlDataSource control to return movies that match the selected category.

Unlike the GridView, DetailsView, ListView, and FormView controls, you cannot assign the names of multiple primary key columns to the DataKeyField property.

Editing Data with the DataList Control
You can use the DataList control to edit database records. However, editing with the DataList control requires more coding than editing with other DataBound controls such as the GridView, FormView, or DetailsView controls.

The EditItemTemplate includes form fields for editing a movie record and an Update and Cancel LinkButton. These LinkButtons raise the UpdateCommand and CancelCommand events, and execute the corresponding event handlers.

Notice that the <%@ Page %> directive includes a MaintainScrollPositionOnPostback attribute. This attribute causes a page to scroll to the same position whenever you post the page back to the server. For example, when you click the Edit link next to a row in the DataList, the page scrolls to the Edit link that you clicked. This attribute works with Internet Explorer 6+, FireFox 1+, and Opera 8+.

Formatting the DataList Control
The DataList control includes a rich set of properties that you can use to format the HTML rendered by the control. If you want to associate Cascading Style Sheet rules with different elements of the DataList, then you can take advantage of any of the following properties:
  • CssClass—Enables you to associate a CSS class with the DataList.
  • AlternatingItemStyle—Enables you to format every other row of the DataList.
  • EditItemStyle—Enables you to format the DataList row selected for editing.
  • FooterStyle—Enables you to format the footer row of the DataList.
  • HeaderStyle—Enables you to format the header row of the DataList.
  • ItemStyle—Enables you to format each row displayed by the DataList.
  • SelectedItemStyle—Enables you to format the selected row in the DataList.
  • SeparatorStyle—Enables you to format the row separator displayed by the DataList.
When formatting the DataList, you also need to work with the following properties:
  • GridLines—Enables you to add rules around the cells in the DataList. Possible values are None, Horizontal, Vertical, and Both.
  • ShowFooter—Enables you to show or hide the footer row.
  • ShowHeader—Enables you to show or hide the header row.
  • UseAccessibleHeader—Enables you to render HTML <th> tags instead of <td> tags for the cells in the header row.

To make a page that contains a DataList more accessible to persons with disabilities, you should always include a HeaderTemplate and enable the UserAccessibleHeader property.

1 comment:

  1. Thanks a lot. This post has been really helpful in one of the tasks that I had to perform.

    Thanks once again.

    ReplyDelete