asp.net|datagrid|datagrid控制項|技巧
一.概述:
運用ASP.NET開發Web應用程式過程中,DataGrid是一個非常重要的控制項,幾乎任何和資料相關的表現都要用到該控制項。所以熟練掌握DataGrid控制項的應用技巧是每個Web開發人員所必備的基本能力。
DataGrid控制項能以表格的方式顯示資料來源中的資料,並提供了諸如分頁、排序以及過濾等一些強大的內建功能,所以它能大大簡化Web應用程式的開發過程。同時,開發人員還可以通過運用各種不同的資料繫結列來自訂DataGrid控制項顯示資料的方式,這樣就大大增強了DataGrid控制項的功能。本文我就將向大家介紹如何運用其中的TemplateColumn、EditCommandColumn、HyperlinkColumn、ButtonColumn以及BoundColumn等來自訂DataGrid控制項顯示資料的方式。
二.BoundColumn資料列的應用:
一般地,我們運用DataGrid控制項開發資料驅動的Web應用程式時會以一行顯示資料來源中的某一條記錄,而其中的一列則顯示某個特定的欄位值。DataGrid控制項本身為我們提供了強大的功能,所以我們只需要以很少的代碼便可以實現資料的顯示功能。不過,這樣也帶來了一個問題,那就是我們如何來個人化顯示資料的方式呢?顯然DataList控制項和Repeater控制項在這個方面要強於DataGrid控制項,不過如果我們放棄了DataGrid控制項也就相當於放棄了其具有的強大功能。那麼,我們如何運用DataGrid控制項也來實現資料顯示的自訂功能呢?首先,我們得把DataGrid控制項根據資料來源自動產生資料繫結列的功能關掉,方法很簡單,就是將其AutoGenerateColumns屬性設定為False即可。下面是這種方法的一個樣本:
<asp:DataGrid runat= "server"id="myDataGrid" AutoGenerateColumns="False">
</asp:DataGrid>
一旦其AutoGenerateColumns屬性為False值,我們就得編程實現資料列的綁定了。在綁定資料列過程中,我們可以運用上面介紹的五中資料列中的任何一種,不過任何資料列都必須在<Columns></Columns>標記內被定義,這個標記能表明被定義的對象是一種資料列。
下面我們首先來介紹BoundColumn資料列的應用。通過運用BoundColumn資料列,我們能根據自己的需求來動態地將資料來源中的資料繫結到特定的資料列上並修改資料列的外觀,比如我們可以更改各個列顯示的次序、使DataGrid控制項只顯示某些欄位的值而非全部欄位的值、更改資料列的標題等等。BoundColumn資料列能設定DataField、DataFormatString、FooterText、HeaderText、HeaderImageUrl以及SortField等屬性,而正是這些使得DataGrid控制項的外觀變得千變萬化、多姿多彩。
下面,我們來建立一個樣本性的Web應用程式項目,該項目運用到了DataGrid控制項,並且顯示了如何在其中運用BoundColumn資料列來自訂資料的顯示方式。下面是本項目的主要檔案以及其代碼後置檔案的內容:
WebForm1.aspx:
<%@ Page language="c#" Codebehind="WebForm1.aspx.cs" AutoEventWireup="false" Inherits="DataGridTemplates.WebForm1" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML>
<HEAD>
<title>WebForm1</title>
<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">
<meta name="CODE_LANGUAGE" Content="C#">
<meta name="vs_defaultClientScript" content="JavaScript">
<meta name="vs_targetSchema" content="http://schemas.microsoft.com/intellisense/ie5">
</HEAD>
<body>
<form id="Form1" method="post" runat="server">
<asp:DataGrid runat="server" id="myDataGrid" AutoGenerateColumns="False" BorderWidth="1px" Font-Names="Verdana,Arial,sans-serif" Font-Size="12px" BorderColor="#404040" GridLines="Horizontal" CellPadding="4">
<AlternatingItemStyle BackColor="#E0E0E0"></AlternatingItemStyle>
<HeaderStyle Font-Bold="True" ForeColor="White" BackColor="Teal"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="CustomerID" HeaderText="ID"></asp:BoundColumn>
<asp:BoundColumn DataField="CompanyName" HeaderText="Company Name"></asp:BoundColumn>
<asp:BoundColumn DataField="ContactName" HeaderText="Contact Name"></asp:BoundColumn>
<asp:BoundColumn DataField="Address" HeaderText="Address"></asp:BoundColumn>
<asp:BoundColumn DataField="City" HeaderText="City"></asp:BoundColumn>
<asp:BoundColumn DataField="Region" HeaderText="Region"></asp:BoundColumn>
<asp:BoundColumn DataField="PostalCode" HeaderText="Postal Code">
<HeaderStyle Wrap="False"></HeaderStyle>
</asp:BoundColumn>
</Columns>
</asp:DataGrid>
</form>
</body>
</HTML>
WebForm1.aspx.cs:
using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Data.SqlClient;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;
namespace DataGridTemplates
{
/// <summary>
/// WebForm1 的摘要說明。
/// </summary>
public class WebForm1 : System.Web.UI.Page
{
protected System.Web.UI.WebControls.DataGrid myDataGrid;
private void Page_Load(object sender, System.EventArgs e)
{
// 在此處放置使用者代碼以初始化頁面
if( !Page.IsPostBack )
BindData();
}
private void BindData()
{
SqlConnection con = new SqlConnection( "server=localhost;database=Northwind;integrated security=true;" );
SqlCommand cmd = new SqlCommand( "SELECT * FROM Customers", con );
try
{
con.Open();
myDataGrid.DataSource = cmd.ExecuteReader();
myDataGrid.DataBind();
con.Close();
}
catch( Exception ) {}
if( con != null && con.State == ConnectionState.Open )
con.Close();
}
#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN:該調用是 ASP.NET Web Form設計器所必需的。
//
InitializeComponent();
base.OnInit(e);
}
/// <summary>
/// 設計器支援所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
}
}
項目建立完畢,在瀏覽器中啟動並執行效果如圖1所示:
圖1 DataGrid控制項中運用BoundColumn資料列顯示資料的效果。
[1] [2] [3] 下一頁