[ Team LiB ] |
Recipe 7.4 Binding Data to a Web Forms DataGridProblemYou want to bind the result set from a query to a DataGrid control. SolutionSet the advanced properties of the DataGrid as demonstrated in the code for the Web Forms page as shown in Example 7-7. Example 7-7. File: ADOCookbookCS0704.aspx<asp:DataGrid id="dataGrid" style="Z-INDEX: 102; LEFT: 16px; POSITION: absolute; TOP: 56px" runat="server" AllowPaging="True" AllowSorting="True"> <AlternatingItemStyle BackColor="#FFFF99"></AlternatingItemStyle> </asp:DataGrid> The code-behind file contains three event handlers and one method:
The C# code for the code-behind is shown in Example 7-8. Example 7-8. File: ADOCookbookCS0704.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) { if(!Page.IsPostBack) { dataGrid.DataSource = CreateDataSource( ); dataGrid.DataKeyField = "OrderId"; dataGrid.DataBind( ); } } private DataTable CreateDataSource( ) { DataTable dt = new DataTable( ); // Create a DataAdapter and fill the Orders table with it. SqlDataAdapter da = new SqlDataAdapter("SELECT * FROM Orders", ConfigurationSettings.AppSettings["DataConnectString"]); da.Fill(dt); // Store data in session variable to store data between // posts to server. Session["DataSource"] = dt; return dt; } private void dataGrid_PageIndexChanged(object source, System.Web.UI.WebControls.DataGridPageChangedEventArgs e) { // Get the data from the session variable. DataView dv = ((DataTable)Session["DataSource"]).DefaultView; // Update the current page for the data grid. dataGrid.CurrentPageIndex = e.NewPageIndex; // Bind the data view to the data grid. dataGrid.DataSource = dv; dataGrid.DataBind( ); } private void dataGrid_SortCommand(object source, System.Web.UI.WebControls.DataGridSortCommandEventArgs e) { // Get the data from the session variable. DataView dv = ((DataTable)Session["DataSource"]).DefaultView; // Set the sort of the data view. dv.Sort = e.SortExpression; // Bind the data view to the data grid. dataGrid.DataSource = dv; dataGrid.DataBind( ); } DiscussionThe DataGrid Web Form control retrieves tabular information from a data source and renders it in a web page. The control supports functionality for selecting, editing, deleting, sorting, and navigating the data. The DataGrid must be bound to a data source such as a DataReader, DataSet, DataTable, or DataView. Any class that implements the IEnumerable interface can be bound. The easiest way to create a DataGrid control is to drag the DataList control onto the web page design surface. The DataGrid control uses templates to display items, control layout, and provide functional capabilities similar to the DataList as described in Recipe 7.3. The differences are:
To specify columns for and format the DataGrid, right-click on the DataList control on the design surface and select Property Builder. The DataGrid can also be customized by editing the HTML directly. A variety of DataGrid columns can be specified, but by default, columns are automatically generated based on the fields in the data source. The DataGrid supports the column types described in Table 7-5.
Among the events that the DataGrid supports are those designed to help implement common data editing and manipulation functionality. These events are described in Table 7-6.
The DataGrid does not inherently support editing, paging, sorting, or updating functionality. Instead, it exposes the events listed in Table 7-6, allowing the functionality to be added using event handling code. 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 ] |