Binding Complex Data to Web Forms Controls
Problem
You want to bind multiple columns in multiple records to an ASP.NET control.
Solution
Set the control's advanced properties (see Table 7-1) before calling DataBind( ) .
The Web Forms page sample code defines the ListBox that is populated with data by the code-behind page logic. The code for the Web Forms page is shown in Example 7-3.
Example 7-3. File: ADOCookbookCS0702.aspx
The code-behind contains one event handler:
Page.Load
Fills a DataTable with the CategoryID and CategoryName from the Categories table in the Northwind sample database. The ListBox server control is bound to the DataTable .
The C# code for the code-behind is shown in Example 7-4.
Example 7-4. File: ADOCookbookCS0702.aspx.cs
// Namespaces, variables, and constants using System; using System.Configuration; using System.Data; using System.Data.SqlClient; // . . . private void Page_Load(object sender, System.EventArgs e) { // Create a DataAdapter and use it to retrieve ID and Name // for all categories. String sqlText = "SELECT CategoryID, CategoryName FROM Categories " + "ORDER BY CategoryName"; SqlDataAdapter da = new SqlDataAdapter(sqlText, ConfigurationSettings.AppSettings["DataConnectString"]); DataTable table = new DataTable("Categories"); da.Fill(table); // Bind the table to the list box control. categoriesListBox.DataSource = table.DefaultView; categoriesListBox.DataValueField = "CategoryID"; categoriesListBox.DataTextField = "CategoryName"; categoriesListBox.DataBind( ); }
Discussion
Complex data binding describes binding a multi-record control to multiple records in a data source. The DataGrid , DataList , and ListBox controls are examples of controls that support complex data binding.
Each control that supports complex data binding exposes a set of properties, which are slightly different for each control, that control the binding. These properties are described in Table 7-1.
Table 7-1. Complex data-binding properties
Property |
Description |
---|---|
DataSource |
Gets or sets the data source that the control is displaying data for. Valid data sources include DataTable , DataView , DataSet , DataViewManager , or any object that implements the IEnumerable interface. |
DataMember |
Gets or sets the table in the data source to bind to the control. You can use this property if the data source contains more than one tablea DataSet , for example. |
DataKeyField |
Gets or sets the key field in the data source. This allows the key field for a listing control to be stored and later accessed without displaying it in the control. |
DataValueField |
Gets or sets the field in the data source that provides the value for the control when an item is selected. |
DataTextField |
Gets or sets the field in the data source that provides the display value for the control when an item is selected. |
After the properties appropriate to the control are set, call the DataBind( ) method of the control or of the Page to bind the data source to the server control.