[ Team LiB ]
Recipe 7.2 Binding ComplexDatatoWebFormsControls
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 WebForms page sample code defines the ListBox that is populated with data by the
code-behind page logic. The code for the WebForms page is shown in Example 7-3
.
Example 7-3. File: ADOCookbookCS0702.aspx
<asp:ListBox id="categoriesListBox" style="Z-INDEX: 102; LEFT: 88px;
POSITION: absolute; TOP: 64px" runat="server" Width="184px"
Height="216px">
</asp:ListBox>
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 databinding 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 complexdata binding.
Each control that supports complexdatabinding 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 table—a
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.
[ Team LiB ]
. Team LiB ]
Recipe 7.2 Binding Complex Data to Web Forms Controls
Problem
You want to bind multiple columns in multiple records to an ASP.NET control control to multiple records in a
data source. The DataGrid, DataList, and ListBox controls are examples of controls that
support complex data binding.