四.templatecolumn数据列的应用:
datagrid控件中的templatecolumn数据列可以说是功能极其强大的,灵活地运用它就能使得datagrid控件显示数据的方式变得多种多样。templatecolumn数据列主要为我们提供了以下四种数据列模板:
·headertemplate
·itemtemplate
·edititemtemplate
·footertemplate
其中headertemplate是用于显示datagrid控件的首行中的文本、图片或是绑定数据的。footertemplate的功能与headertemplate的功能类似,不过它是用于显示尾行中的内容的。edititemtemplate是应用于具有编辑功能的数据列的,任何运用了该模板的数据列的数据能被用户编辑并在适当时候更新到数据源中。
itemtemplate允许你建立具有完全自定义数据显示方式的数据列。通过运用<%# container.dataitem("[fieldname]") %>或<%# databinder.eval(container.dataitem, "[fieldname]", "{0:[formatstring]}") %>两种数据绑定语法你就可以将数据源中的某列数据绑定到相应的数据列中并赋予完全自定义的显示方式。
下面我们在第三步中建立的web应用程序中添加一个新的web页面-webform2,该页面能显示公司的详细信息,也就是在图2中的按钮被点击时浏览器会导向到的页面。它能根据用户的选择显示相应公司的详细信息,方法就是判断request.querystring内的信息。如果其中包含了一个"id"名/值对,则根据其中的值选择相对应的公司信息并显示在页面中,如果没有包含任何"id"值的信息则从数据表中选取所有公司的信息并显示在页面中。同时还要指出的是,在一个datagrid控件中你可以将多种类型的数据列结合起来一起使用,并根据不同的需要选择合适的数据列显示相应的数据。下面是本页面的html文件以及其代码后置文件的内容:
webform2.aspx:
<%@ page language="c#" codebehind="webform2.aspx.cs" autoeventwireup="false" inherits="datagridtemplates2.webform2" %>
<!doctype html public "-//w3c//dtd html 4.0 transitional//en" >
<html>
<head>
<title>webform2</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 ms_positioning="flowlayout">
<form id="form1" method="post" runat="server">
<asp:datagrid id="mydatagrid" runat="server" itemstyle-font-size="x-small" headerstyle-font-bold="true" headerstyle-font-size="x-small" alternatingitemstyle-backcolor="#efefef" cellpadding="4" borderwidth="1" autogeneratecolumns="false" borderstyle="solid" gridlines="horizontal" bordercolor="#404040" font-names="verdana,arial,sans-serif" font-size="11px">
<alternatingitemstyle backcolor="#e0e0e0"></alternatingitemstyle>
<itemstyle font-size="x-small"></itemstyle>
<headerstyle font-size="x-small" font-bold="true" forecolor="white" backcolor="teal"></headerstyle>
<columns>
<asp:templatecolumn>
<headertemplate>
<b>company detail</b>
</headertemplate>
<itemtemplate>
<table border="0" cellpadding="4" cellspacing="0" width="100%" style="font-size: 11px; font-family: verdana, arial, sans-serif">
<tr>
<td colspan="4">
<b>
<%# databinder.eval( container.dataitem, "companyname" ) %>
</b>
</td>
</tr>
<tr>
<td width="25%" valign="top"><b>contact:</b></td>
<td width="25%" valign="top" nowrap>
<%# databinder.eval( container.dataitem, "contactname" ) %>
</td>
<td width="25%" valign="top"><b>phone:</b></td>
<td width="25%" valign="top" nowrap>
<%# databinder.eval( container.dataitem, "phone" ) %>
</td>
</tr>
<tr>
<td width="25%" valign="top"><b>title:</b></td>
<td width="25%" valign="top">
<%# databinder.eval( container.dataitem, "contacttitle" ) %>
</td>
<td width="25%" valign="top"><b>fax:</b></td>
<td width="25%" valign="top" nowrap>
<%# databinder.eval( container.dataitem, "fax" ) %>
</td>
</tr>
<tr>
<td width="25%" valign="top"><b>address:</b></td>
<td width="25%" valign="top" colspan="3">
<%# databinder.eval( container.dataitem, "address" ) %>
<%# databinder.eval( container.dataitem, "city" ) %>
,
<%# databinder.eval( container.dataitem, "region" ) %>
<%# databinder.eval( container.dataitem, "postalcode" ) %>
<%# databinder.eval( container.dataitem, "country" ) %>
</td>
</tr>
</table>
</itemtemplate>
</asp:templatecolumn>
</columns>
</asp:datagrid>
</form>
</body>
</html>
webform2.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 datagridtemplates2
{
/// <summary>
/// webform2 的摘要说明。
/// </summary>
public class webform2 : 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()
{
dataset ds = new dataset();
sqldataadapter da;
string strsql;
if( request.querystring["id"] == null )
strsql = "select * from customers";
else
strsql = "select * from customers where customerid = '" + request.querystring["id"].tostring() + "'";
da = new sqldataadapter( strsql, "server=localhost;integrated security=true;database=northwind" );
da.fill( ds, "customers" );
mydatagrid.datasource = ds.tables["customers"].defaultview;
mydatagrid.databind();
}
#region web form designer generated code
override protected void oninit(eventargs e)
{
//
// codegen:该调用是 asp.net web 窗体设计器所必需的。
//
initializecomponent();
base.oninit(e);
}
/// <summary>
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
/// 此方法的内容。
/// </summary>
private void initializecomponent()
{
this.load += new system.eventhandler(this.page_load);
}
#endregion
}
}
新页面创建完毕,在浏览器中运行的效果如图3所示:

图3 datagrid控件中运用templatecolumn数据列显示数据的效果。
五.总结:
到此为止,我想大家已经基本掌握了在web应用程序中运用datagrid控件自定义数据显示的方法了。相比于datalist控件和repeater控件,datagrid控件具有更多强大的功能,而且其自定义数据显示的功能也不弱。所以只要你好好掌握其中的技巧和方法,运用datagrid控件也同样可以使得你的web应用程序不仅具有强大的数据处理功能,而且非常富有个性。