日期:2009-05-26 浏览次数:20448 次
在讨论DataGrid控制时,常常可以听到别人对此方法的嘲笑。他们常常抛弃它转而使用第三方的工具。事实上,DataGrid作为. NET Framework的核心部分,已成为我开发工具箱中极具价值的工具。
什么是总计?
在应用程序中使用DataGrid控制可以允许你以对绝大部分用户来说熟悉的格式来发布数据(栅格格式常常被用于如微软Excel等电子数据表格应用程序)。使用此类型的应用程序,用户可以按照习惯查看自定义函数如每栏总计、平均值等。而这些函数并不是DataGrid的标准函数,你可以自行编写代码来轻松地实现这些函数。
在本例中,我将使用所有SQL Server版本都可提供的Northwind范例数据库,并从顺序表格中提取数据。我将对货物栏计算总计值,这个总计值应当在DataGrid中一致地显示出来。一下就是此应用程序的C#代码。
<%@ Import Namespace="System.Data.SqlClient" %>
<%@ Import Namespace="System.Data" %>
<%@ Page language="c#" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" >
<HTML><HEAD><title>Builder.com DataGrid Totals Example</title>
</HEAD>
<body MS_POS99vIONING="GridLayout">
double totalFreight = 0;
private void Page_Load(object sender, System.EventArgs e) {
if (!Page.IsPostBack) {
BindData();
} }
private void BindData() {
const string sConn;
sConn = "server=(local);Initial Catalog=Northwind;UID=ctester;PWD=password";
try {
SqlConnection conn = new SqlConnection(sConn);
conn.Open();
string sSQL = "SELECT TOP 10 OrderID, Freight, ShipName, ShipCountry FROM
Orders";
SqlCommand comm = new SqlCommand(sSQL, conn);
SqlDataReader dr = comm.ExecuteReader();
dgNorthwind.DataSource = dr;
dgNorthwind.DataBind();
} catch (Exception e) {
Console.WriteLine(e.ToString());
} }
private void doTotal(object sender, DataGridItemEventArgs e) {
if (e.Item.ItemType == ListItemType.Item | e.Item.ItemType ==
ListItemType.AlternatingItem) {
double currentFreight = Convert.ToDouble(DataBinder._Eval(e.Item.DataItem,
"Freight"));
totalFreight += currentFreight;
} else if (e.Item.ItemType == ListItemType.Footer) {
e.Item.Cells[2].Text = "Total:";
e.Item.Cells[3].Text = Convert.ToString(totalFreight);
} }
</script>
<form id="frmDataGridTotals" method="post" runat="server">
<asp:DataGrid id="dgNorthwind"
style="Z-INDEX: 101; LEFT: 24px; POS99vION: absolute; TOP: 32px"
runat="server" Height="320px" Width=