1.1.1 Problem You want to use an ASP.NET control to display some data in a tabular format. 1.1.2 Solution Use a Repeater , DataList , or DataGrid control. Always choose the smallest and fastest control that meets your needs, which invariably will be influenced by other criteria. For example: -
- If you need a quick and easy solution
-
Use a DataGrid . -
- If you need a lightweight read-only tabular display
-
Use a Repeater . -
- If you need your solution to be small and fast
-
Use a Repeater (lightest) or DataList (lighter). -
- If you want to use a template to customize the appearance of the display
-
Choose a Repeater or DataList . -
- If you want to select rows or edit the contents of a data table
-
Choose a DataList or a DataGrid . -
- If you want built-in support to sort your data by column or paginate its display
-
Choose a DataGrid . 1.1.3 Discussion ASP.NET provides three excellent options for displaying tabular data ” Repeater , DataList , and DataGrid ”but each comes with trade-offs. For instance, the DataGrid control is particularly versatile, but you can pay a heavy price in terms of performance. On the flip side, the Repeater control is lighter weight, but is for read-only display; if you later decide you need to edit your data, you must rework your code to use the DataList or DataGrid control instead (unless, of course, you want to embark on your own custom coding odyssey ). The impact on performance is due to the fact that ASP.NET creates an actual control for every element of a DataGrid control, even whitespace, which is built as a Literal control. Each of these controls is then responsible for rendering the appropriate HTML output. The DataGrid is, therefore, the heavyweight of the grid control group , because of the server processing required to build the applicable output. The DataList is lighter and the Repeater lighter still. Table 1-1 summarizes the built-in features supported by the tabular controls and only includes controls that support data binding. (A standard Table control is not included because it does not inherently support data binding, even though individual controls placed in a table can be data bound.) With custom code, there are virtually no limits to what you can do to modify the behavior of these controls. Table 1-1. Comparative summary of native tabular control features Feature | Repeater control | DataList control | DataGrid control | Default appearance | None (template driven) | Table | Table | Automatically generates columns from the data source | No | No | Yes | Header can be customized | Yes | Yes | Yes | Data row can be customized | Yes | Yes | Yes | Supports alternating row customization | Yes | Yes | Yes | Supports customizable row separator | Yes | Yes | No | Footer can be customized | Yes | Yes | Yes | Supports pagination | No | No | Yes | Supports sorting | No | No | Yes | Supports editing contents | No | Yes | Yes | Supports selecting a single row | No | Yes | Yes | Supports selecting multiple rows | No | No | No | Supports arranging data items horizontally or vertically (from left-to-right or top-to-bottom) | No | Yes | No | Performance issues aside, there are some other aspects to consider when choosing a tabular control. As a general rule, the DataGrid works extraordinarily well for a quick-and-dirty tabular display (see Recipe 1.2) and for other situations in which you think you'll be reasonably satisfied with its default appearance and behavior. Indeed, because the DataGrid is so versatile, this chapter provides many recipes for modifying and adapting it. However, if you anticipate needing a lot of flexibility in controlling the organization and layout of the tabular display or you do not need to edit or paginate the data, you may want to consider using the DataList or Repeater instead. For example, Recipe 1.3 shows how you can use templates to organize and enhance the output of a tabular display. Take a look at that recipe's output (Figure 1-2) to see what we're driving at. Some up-front planning in this respect can save you considerable time and effort down the road. |