Recipe 1.2 Generating a Quick-and-Dirty Tabular Display

     

1.2.1 Problem

You want to display data from a database in a table, and you're not overly concerned about performance or your ability to control the arrangement of the data items within the display.

1.2.2 Solution

Use a DataGrid control and bind the data to it.

In the .aspx file, add the DataGrid control responsible for displaying the data.

In the code-behind class for the page, use the .NET language of your choice to:

  1. Open a connection to the database.

  2. Build a query string, and read the desired data from the database.

  3. Assign the data source to the DataGrid control and bind it.

Figure 1-1 shows the appearance of a typical DataGrid in a browser. Example 1-1 through Example 1-3 show the .aspx and VB and C# code-behind files for the application that produces this result.

Figure 1-1. Quick-and-dirty DataGrid output
figs/ancb_0101.gif

1.2.3 Discussion

Implementing a simple DataGrid requires very little coding. You must first add a DataGrid tag to the .aspx file for your application and set a few of its attributes, as shown in Example 1-1. The DataGrid tag has many attributes you can use to control the creation of a DataGrid object, but only three are required: the id , runat , and AutoGenerateColumns attributes. The id and runat attributes are required by all server controls. When the AutoGenerateColumns attribute is set to True , it causes the DataGrid to automatically create the required columns along with their headings from the data source.

The code required to read the data and bind it to the DataGrid goes into the code-behind class associated with the .aspx file, as shown in Example 1-2 (VB) and Example 1-3 (C#). In our example, this code is placed in the Page_Load method, for convenience of illustration. It opens a connection to the database, reads the data from the database using an OleDbCommand and an OleDbDataReader , binds the data reader to the DataGrid control, and then performs the necessary cleanup.

When using the data reader objects, be sure to close the connection to the database. Failing to close the connection will tie up system resources, because the garbage collector will not close database connections. In addition, be aware that while the data reader is using the database connection, no other operations can be performed with the data connection, other than closing it.


Setting the AutoGenerateColumns attribute of a DataGrid to True is a simple way to format your data, but it has a couple of drawbacks. First, using the attribute causes a column to be created for every column specified in the Select statement, so you should be careful to include in the statement only the data you want to see in the DataGrid . In other words, use the SELECT * statement with caution. Second, the columns you SELECT will be given the same names as the columns in the database. You can get around this problem by using the AS clause in your SELECT statement to rename the columns when the data is read into the data reader.

1.2.4 See Also

For more information on the DataGrid control, see ASP.NET in a Nutshell and Programming ASP.NET (O'Reilly); search for OleDBCommand and OleDbDataReader : on the MSDN Library; other sources for ADO.NET-specific information are ADO.NET in a Nutshell and ADO.NET Cookbook (O'Reilly).

Example 1-1. Quick-and-dirty DataGrid (.aspx)
 <%@ Page Language="vb" AutoEventWireup="false"           Codebehind="CH01QuickAndDirtyDatagridVB.aspx.vb"           Inherits="ASPNetCookbook.VBExamples.CH01QuickAndDirtyDatagridVB" %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html>   <head>     <title>Quick and Dirty Datagrid</title>     <link rel="stylesheet" href="css/ASPNetCookbook.css">   </head>   <body leftmargin="0" marginheight="0" marginwidth="0" topmargin="0">     <form id="frmData" method="post" runat="server">       <table width="100%" cellpadding="0" cellspacing="0" border="0">         <tr>           <td align="center">             <img src="images/ASPNETCookbookHeading_blue.gif">           </td>         </tr>         <tr>           <td class="dividerLine">             <img src="images/spacer.gif" height="6" border="0"></td>         </tr>       </table>       <table width="90%" align="center" border="0">         <tr>           <td><img src="images/spacer.gif" height="10" border="0"></td>         </tr>         <tr>           <td align="center" class="PageHeading">               Quick and Dirty DataGrid With Data From Database (VB)</td>         </tr>         <tr>           <td><img src="images/spacer.gif" height="10" border="0"></td>         </tr>         <tr>           <td align="center">             <!-- Minimal datagrid -->  <asp:DataGrid id="dgQuick"   runat="server"   BorderColor="000080"   BorderWidth="2px"   AutoGenerateColumns="True"   width="100%" />  </td>         </tr>       </table>     </form>   </body> </html> 

Example 1-2. Quick-and-dirty DataGrid code-behind (.vb)
 Option Explicit On  Option Strict On '----------------------------------------------------------------------------- ' '   Module Name: CH01QuickAndDirtyDatagridVB.aspx.vb ' '   Description: This class provides the code behind for '                CH01QuickAndDirtyDatagridVB.aspx ' '***************************************************************************** Imports Microsoft.VisualBasic Imports System.Configuration Imports System.Data Imports System.Data.OleDb Namespace ASPNetCookbook.VBExamples   Public Class CH01QuickAndDirtyDatagridVB     Inherits System.Web.UI.Page     'controls on form     Protected dgQuick As System.Web.UI.WebControls.DataGrid     '*************************************************************************     '     '   ROUTINE: Page_Load     '     '   DESCRIPTION: This routine provides the event handler for the page load     '                event.  It is responsible for initializing the controls     '                on the page.     '     '-------------------------------------------------------------------------     Private Sub Page_Load(ByVal sender As System.Object, _                           ByVal e As System.EventArgs) _             Handles MyBase.Load       Dim dbConn As OleDbConnection       Dim dCmd As OleDbCommand       Dim dReader As OleDbDataReader       Dim strConnection As String       Dim strSQL As String       If (Not Page.IsPostBack) Then         Try  'get the connection string from web.config and open a connection   'to the database   strConnection = _   ConfigurationSettings.AppSettings("dbConnectionString")   dbConn = New OleDb.OleDbConnection(strConnection)   dbConn.Open( )   'build the query string and get the data from the database   strSQL = "SELECT Title, ISBN, Publisher " & _   "FROM Book " & _   "ORDER BY Title"   dCmd = New OleDbCommand(strSQL, dbConn)   dReader = dCmd.ExecuteReader( )   'set the source of the data for the datagrid control and bind it   dgQuick.DataSource = dReader   dgQuick.DataBind( )  Finally           'cleanup           If (Not IsNothing(dReader)) Then             dReader.Close( )           End If           If (Not IsNothing(dbConn)) Then             dbConn.Close( )           End If         End Try       End If     End Sub  'Page_Load   End Class  'CH01QuickAndDirtyDatagridVB End Namespace 

Example 1-3. Quick-and-dirty DataGrid code-behind (.cs)
 //---------------------------------------------------------------------------- // //   Module Name: CH01QuickAndDirtyDatagridCS.aspx.cs // //   Description: This class provides the code behind for //                CH01QuickAndDirtyDatagridCS.aspx // //**************************************************************************** using System; using System.Configuration; using System.Data; using System.Data.OleDb; namespace ASPNetCookbook.CSExamples {   public class CH01QuickAndDirtyDatagridCS : System.Web.UI.Page   {     // controls on form     protected System.Web.UI.WebControls.DataGrid dgQuick;     //************************************************************************     //     //   ROUTINE: Page_Load     //     //   DESCRIPTION: This routine provides the event handler for the page     //                load event.  It is responsible for initializing the     //                controls on the page.     //     //------------------------------------------------------------------------     private void Page_Load(object sender, System.EventArgs e)     {       OleDbConnection dbConn = null;       OleDbCommand dCmd = null;       OleDbDataReader dReader = null;       String strConnection = null;       String strSQL = null;       if (!Page.IsPostBack)       {         try         {  // get the connection string from web.config and open a connection   // to the database   strConnection =   ConfigurationSettings.AppSettings["dbConnectionString"];   dbConn = new OleDbConnection(strConnection);   dbConn.Open( );   // build the query string and get the data from the database   strSQL = "SELECT Title, ISBN, Publisher " +   "FROM Book " +   "ORDER BY Title";   dCmd = new OleDbCommand(strSQL, dbConn);   dReader = dCmd.ExecuteReader( );   // set the source of the data for the datagrid control and bind it   dgQuick.DataSource = dReader;   dgQuick.DataBind( );  }  // try         finally         {           // cleanup           if (dReader != null)           {             dReader.Close( );           }           if (dbConn != null)           {             dbConn.Close( );           }         }  // finally       }     }  // Page_Load   }  // CH01QuickAndDirtyDatagridCS } 



ASP. NET Cookbook
ASP.Net 2.0 Cookbook (Cookbooks (OReilly))
ISBN: 0596100647
EAN: 2147483647
Year: 2006
Pages: 179

flylib.com © 2008-2017.
If you may any questions please contact us: flylib@qtcs.net