相关文章
网页设计构成网页内容的段落
网站建设环境搭配
网站建设用好图像的作用区域标记—area
网站设计Photoshop结合Dreamweaver制作网页相册方法
网站建设网页中广告条的关闭方法
网站建设Flash 遮罩特效的综合操练(1)
北京网站建设flash8与javascript集成
网页设计在 Dreamweaver 中指定哪里处理动态页
网站设计Dreamweaver 常见问题2
北京网页设计修饰之美:CSS在表格边框上的美学应用
品牌理念
北京网站建设最佳合作伙伴
北京网站建设专家企通互联
竭诚为您提供网站建设服务!
友好连接
文章搜索
你的位置:首页 >> 网站制作 >> 网站建设ASP.NET中为DataGrid添加合计字段
网站建设ASP.NET中为DataGrid添加合计字段
作者: 北京网站建设 日期:2008-03-27 06:03:34 来源: http://www.qt-net.com
论坛中最常见的一个问题是:“ 我怎样在 DataGrid 中显示列合计?”。 我亲自多次为这个问题提供了示例代码,因此,我想在DotNetJunkies 的标题中提供这么一份指南。 在这份指南中你将会学到怎样在 DataGrid 中编程实现对某一列的值进行统计,并在 DataGrid 的页脚中显示其合计值。这份指南中供下载的示例中包括了 网页设计 C# 和 Visual Basic.NET 两种代码。 网站设计
北京网站建设
这份指南的最终结果看起来像这样: www.qt-net.com 北京网站建设
北京网页设计
网站制作
从上图可看出: 北京网站建设
北京网站设计
上面所用到的屏幕图片中的 DataGrid 是一个非常典型的 DataGrid 。有许多控制 DataGrid 外观的属性,它使用两个 BoundColumns 来操作数据,但这并不是最重要的。做好这项工作真正重要的是使用 DataGrid.OnItemDataBound 事件。这个事件将会触发每次绑定一条记录到 DataGrid。你可以为这个事件创建一个事件处理,以操作数据记录。在这种情况下,你将会得到运行时 Price 列的合计值。 北京网站制作
北京网站建设北京网站建设
页脚指的是数据范围的最后一行。当这行被限定时,在事件句处理你可以得到 北京网站设计 Price 列的运行时统计值。 北京网站设计
网站设计
实施: 网站建设
北京网站建设
首先让我们找到一种方法来操作 Web 窗体输出。 这份指南中,你将使用一个 Web 窗体 (calcTotals.aspx) 以及一个类代码文件 (calcTotals.aspx.cs)。这份指南的意图是, 类代码将会使用 Just-In-Time 编译器来编译。 这里是 calcTotals.aspx 的代码: 北京网站建设
北京网站制作
<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %> 网站制作
<html> 网站设计
<body bgcolor="white"> 北京网页设计
<asp:DataGrid id="MyGrid" runat="server" 北京网站设计
AutoGenerateColumns="False" 网站设计
CellPadding="4" CellSpacing="0" 网站制作
BorderStyle="Solid" BorderWidth="1" 网站建设 网站制作
Gridlines="None" BorderColor="Black" 北京网页设计
ItemStyle-Font-Name="Verdana" 网站建设
ItemStyle-Font-Size="9pt" 北京网页设计
HeaderStyle-Font-Name="Verdana" 网页设计
HeaderStyle-Font-Size="10pt" 企通互联
HeaderStyle-Font-Bold="True" 北京网站设计
HeaderStyle-ForeColor="White" 北京网页设计
HeaderStyle-BackColor="Blue" 北京网站建设
FooterStyle-Font-Name="Verdana" 北京网站设计
FooterStyle-Font-Size="10pt" 北京网站设计
FooterStyle-Font-Bold="True" 网站设计
FooterStyle-ForeColor="White" 企通互联
FooterStyle-BackColor="Blue" 北京网站设计
OnItemDataBound="MyDataGrid_ItemDataBound" 网页设计
ShowFooter="True"> 北京网站设计
<Columns> 北京网站设计
<asp:BoundColumn HeaderText="Title" DataField="title" /> 网站制作
<asp:BoundColumn HeaderText="Price" DataField="price" 北京网站建设
ItemStyle-HorizontalAlign="Right" 北京网站设计
HeaderStyle-HorizontalAlign="Center" /> 企通互联
</Columns> 北京网站制作
</asp:DataGrid> 网站制作
</body> 北京网页设计
</html> 北京网站设计
北京网站设计
在 Web 窗体中你使用 @ Page 来直接声明这个页所继承的类代码。SRC 属性指明了类代码将使用 JIT 编译器来编译。 Web 窗体中的大部分代码样式声明用来使 DataGrid 外观变得更好看。 北京网页设计
北京网页设计 北京网页设计
最后指定的属性之一是 OnItemDataBound 属性。这个事件将会在 OnItemDataBound 事件发生时被触发。 北京网站建设
北京网页设计
Web 窗体中的 DataGrid (MyGrid) 包含有两个 BoundColumns,一个是 Title ,另一个是Price。 这里将显示 Pubs 数据库(SQL Server)中 Titles 表的 title 及 price 列。 网站制作
网站制作
忽略代码的定义 北京网页设计
北京网站设计
类代码在所有的地方都将使用。在类代码中,你可以操作两个事件:Page_Load 事件以及 MyGrid_OnItemDataBound 事件。还有一个私有方法 CalcTotal, 用它来简单的完成运行时统计的数学运算。 网站设计
北京网站建设
类代码基本结构块的起始部分: 网站设计
网站制作
using System; 企通互联
using System.Web; 企通互联
using System.Web.UI; 北京网站设计
using System.Web.UI.WebControls; 北京网站制作
using System.Web.UI.HtmlControls; 北京网站建设
using System.Data; 网站制作
using System.Data.SqlClient; 北京网站设计
网站设计
namespace myApp 北京网站制作
{ 企通互联
public class calcTotals : Page 北京网页设计
{ 北京网站建设
protected DataGrid MyGrid; 企通互联
private double runningTotal = 0; 北京网站设计
} 北京网站建设
} 企通互联
北京网页设计
在类代码的基本结构中,你必须使用相关语句导入名字空间(namespace)。在类声明中,你声明了两个变量,一个是类代码中映射 Web 窗体的 DataGrid(MyGrid)控件的变量;一个是用来操作 DataGrid 的 Price 列中运行时统计的双精度值。 网页设计
网站设计
Page_Load 事件 北京网页设计
网站制作
在 Page_Load 事件中,你所要做的就是连接到 SQL Server 并执行一个简单的 SqlCommand。 你取得了所有 Price 值>0 的 title 和 price 数据。你使用 SqlCommand.ExecuteReader 方法返回一个 SqlDataReader 并将其直接绑定到 DataGrid (MyGrid)。 北京网站制作
北京网站设计
protected void Page_Load(object sender, EventArgs e) 网站建设
{ 网站制作
SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//创建SQL连接 网页设计
SqlCommand myCommand = new SqlCommand("SELECT title, price FROM Titles WHERE price > 0", myConnection);//创建SQL命令 网页设计
北京网页设计
try 北京网页设计
{ 网页设计
myConnection.Open();//打开数据库连接 北京网站建设
MyGrid.DataSource = myCommand.ExecuteReader();//指定 DataGrid 的数据源 网站设计
MyGrid.DataBind();//绑定数据到 DataGrid 网站制作
myConnection.Close();//关闭数据连接 网站制作
} 北京网页设计
catch(Exception ex) 网站设计
{ 网站建设
//捕获错误 网站制作
HttpContext.Current.Response.Write(ex.ToString()); 企通互联
} 网页设计
} 网站建设
网站设计
CalcTotals 方法 网站建设
网页设计
CalcTotals 方法用来处理 runningTotal 变量。这个值将以字符串形式来传递。 你需要将它解析为双精度型,然后 runningTotal 变量就成了双精度类型。 网页设计
北京网页设计
private void CalcTotal(string _price) 北京网页设计
{ 网站建设
try 北京网站建设
{ 网站制作
runningTotal += Double.Parse(_price); 企通互联
} 北京网站建设
catch 网站制作
{ 北京网页设计
//捕获错误 北京网站建设
} 北京网站制作
} 北京网站设计
网站制作
MyGrid_ItemDataBound 网站设计事件 网站设计
网页设计
MyGrid_ItemDataBound 事件在数据源中每行绑定到 DataGrid 时被调用。在这个事件处理中,你可以处理每一行数据。 这里你的目的是,你将需要调用 CalcTotals 方法并从 Price 列传递文本,并用金额型格式化每一行的 Price 列, 并在页脚行中显示 runningTotal 的值。 北京网站制作
北京网页设计
public void MyDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e) 北京网站设计
{ 企通互联
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 网站制作
{ 北京网页设计
CalcTotal( e.Item.Cells[1].Text ); 北京网站建设
北京网站制作e.Item.Cells[1].Text = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Text)); 网页设计
} 北京网页设计
else if(e.Item.ItemType == ListItemType.Footer ) 北京网页设计
{ 企通互联
e.Item.Cells[0].Text="Total"; 北京网站设计
e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); 北京网站建设
} 网站建设
} 北京网页设计
企通互联
在 MyGrid_ItemDataBound 事件句柄中,首先你得使用 ListItemType 判断当前的 DataGridItem 是一个数据项还是AlternatingItem 行。如果是数据项,你调用 CalcTotals,并将 Price 列的值作为参数传递给它;然后你以金额格式对 Price 列进行格式化及着色。 网站建设
北京网站建设
如果 DataGridItem 是页脚,可以用金额格式显示 runningTotal。 北京网站设计
网站制作
总结 网站设计
北京网站设计
在这份指南中,你学到了怎样使用 DataGrid.OnItemDataBound 事件来实现运行时对DataGrid 的某一列进行统计。使用这个事件,你可以创建一个列的合计并可对DataGrid行的页脚进行着色。 网站设计
网站设计
北京网站建设
这份指南的最终结果看起来像这样: www.qt-net.com 北京网站建设
北京网页设计
网站制作从上图可看出: 北京网站建设
北京网站设计
上面所用到的屏幕图片中的 DataGrid 是一个非常典型的 DataGrid 。有许多控制 DataGrid 外观的属性,它使用两个 BoundColumns 来操作数据,但这并不是最重要的。做好这项工作真正重要的是使用 DataGrid.OnItemDataBound 事件。这个事件将会触发每次绑定一条记录到 DataGrid。你可以为这个事件创建一个事件处理,以操作数据记录。在这种情况下,你将会得到运行时 Price 列的合计值。 北京网站制作
北京网站建设北京网站建设
页脚指的是数据范围的最后一行。当这行被限定时,在事件句处理你可以得到 北京网站设计 Price 列的运行时统计值。 北京网站设计
网站设计
实施: 网站建设
北京网站建设
首先让我们找到一种方法来操作 Web 窗体输出。 这份指南中,你将使用一个 Web 窗体 (calcTotals.aspx) 以及一个类代码文件 (calcTotals.aspx.cs)。这份指南的意图是, 类代码将会使用 Just-In-Time 编译器来编译。 这里是 calcTotals.aspx 的代码: 北京网站建设
北京网站制作
<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %> 网站制作
<html> 网站设计
<body bgcolor="white"> 北京网页设计
<asp:DataGrid id="MyGrid" runat="server" 北京网站设计
AutoGenerateColumns="False" 网站设计
CellPadding="4" CellSpacing="0" 网站制作
BorderStyle="Solid" BorderWidth="1" 网站建设 网站制作
Gridlines="None" BorderColor="Black" 北京网页设计
ItemStyle-Font-Name="Verdana" 网站建设
ItemStyle-Font-Size="9pt" 北京网页设计
HeaderStyle-Font-Name="Verdana" 网页设计
HeaderStyle-Font-Size="10pt" 企通互联
HeaderStyle-Font-Bold="True" 北京网站设计
HeaderStyle-ForeColor="White" 北京网页设计
HeaderStyle-BackColor="Blue" 北京网站建设
FooterStyle-Font-Name="Verdana" 北京网站设计
FooterStyle-Font-Size="10pt" 北京网站设计
FooterStyle-Font-Bold="True" 网站设计
FooterStyle-ForeColor="White" 企通互联
FooterStyle-BackColor="Blue" 北京网站设计
OnItemDataBound="MyDataGrid_ItemDataBound" 网页设计
ShowFooter="True"> 北京网站设计
<Columns> 北京网站设计
<asp:BoundColumn HeaderText="Title" DataField="title" /> 网站制作
<asp:BoundColumn HeaderText="Price" DataField="price" 北京网站建设
ItemStyle-HorizontalAlign="Right" 北京网站设计
HeaderStyle-HorizontalAlign="Center" /> 企通互联
</Columns> 北京网站制作
</asp:DataGrid> 网站制作
</body> 北京网页设计
</html> 北京网站设计
北京网站设计
在 Web 窗体中你使用 @ Page 来直接声明这个页所继承的类代码。SRC 属性指明了类代码将使用 JIT 编译器来编译。 Web 窗体中的大部分代码样式声明用来使 DataGrid 外观变得更好看。 北京网页设计
北京网页设计 北京网页设计
最后指定的属性之一是 OnItemDataBound 属性。这个事件将会在 OnItemDataBound 事件发生时被触发。 北京网站建设
北京网页设计
Web 窗体中的 DataGrid (MyGrid) 包含有两个 BoundColumns,一个是 Title ,另一个是Price。 这里将显示 Pubs 数据库(SQL Server)中 Titles 表的 title 及 price 列。 网站制作
网站制作
忽略代码的定义 北京网页设计
北京网站设计
类代码在所有的地方都将使用。在类代码中,你可以操作两个事件:Page_Load 事件以及 MyGrid_OnItemDataBound 事件。还有一个私有方法 CalcTotal, 用它来简单的完成运行时统计的数学运算。 网站设计
北京网站建设
类代码基本结构块的起始部分: 网站设计
网站制作
using System; 企通互联
using System.Web; 企通互联
using System.Web.UI; 北京网站设计
using System.Web.UI.WebControls; 北京网站制作
using System.Web.UI.HtmlControls; 北京网站建设
using System.Data; 网站制作
using System.Data.SqlClient; 北京网站设计
网站设计
namespace myApp 北京网站制作
{ 企通互联
public class calcTotals : Page 北京网页设计
{ 北京网站建设
protected DataGrid MyGrid; 企通互联
private double runningTotal = 0; 北京网站设计
} 北京网站建设
} 企通互联
北京网页设计
在类代码的基本结构中,你必须使用相关语句导入名字空间(namespace)。在类声明中,你声明了两个变量,一个是类代码中映射 Web 窗体的 DataGrid(MyGrid)控件的变量;一个是用来操作 DataGrid 的 Price 列中运行时统计的双精度值。 网页设计
网站设计
Page_Load 事件 北京网页设计
网站制作
在 Page_Load 事件中,你所要做的就是连接到 SQL Server 并执行一个简单的 SqlCommand。 你取得了所有 Price 值>0 的 title 和 price 数据。你使用 SqlCommand.ExecuteReader 方法返回一个 SqlDataReader 并将其直接绑定到 DataGrid (MyGrid)。 北京网站制作
北京网站设计
protected void Page_Load(object sender, EventArgs e) 网站建设
{ 网站制作
SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//创建SQL连接 网页设计
SqlCommand myCommand = new SqlCommand("SELECT title, price FROM Titles WHERE price > 0", myConnection);//创建SQL命令 网页设计
北京网页设计
try 北京网页设计
{ 网页设计
myConnection.Open();//打开数据库连接 北京网站建设
MyGrid.DataSource = myCommand.ExecuteReader();//指定 DataGrid 的数据源 网站设计
MyGrid.DataBind();//绑定数据到 DataGrid 网站制作
myConnection.Close();//关闭数据连接 网站制作
} 北京网页设计
catch(Exception ex) 网站设计
{ 网站建设
//捕获错误 网站制作
HttpContext.Current.Response.Write(ex.ToString()); 企通互联
} 网页设计
} 网站建设
网站设计
CalcTotals 方法 网站建设
网页设计
CalcTotals 方法用来处理 runningTotal 变量。这个值将以字符串形式来传递。 你需要将它解析为双精度型,然后 runningTotal 变量就成了双精度类型。 网页设计
北京网页设计
private void CalcTotal(string _price) 北京网页设计
{ 网站建设
try 北京网站建设
{ 网站制作
runningTotal += Double.Parse(_price); 企通互联
} 北京网站建设
catch 网站制作
{ 北京网页设计
//捕获错误 北京网站建设
} 北京网站制作
} 北京网站设计
网站制作
MyGrid_ItemDataBound 网站设计事件 网站设计
网页设计
MyGrid_ItemDataBound 事件在数据源中每行绑定到 DataGrid 时被调用。在这个事件处理中,你可以处理每一行数据。 这里你的目的是,你将需要调用 CalcTotals 方法并从 Price 列传递文本,并用金额型格式化每一行的 Price 列, 并在页脚行中显示 runningTotal 的值。 北京网站制作
北京网页设计
public void MyDataGrid_ItemDataBound(object sender, DataGridItemEventArgs e) 北京网站设计
{ 企通互联
if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) 网站制作
{ 北京网页设计
CalcTotal( e.Item.Cells[1].Text ); 北京网站建设
北京网站制作e.Item.Cells[1].Text = string.Format("{0:c}", Convert.ToDouble(e.Item.Cells[1].Text)); 网页设计
} 北京网页设计
else if(e.Item.ItemType == ListItemType.Footer ) 北京网页设计
{ 企通互联
e.Item.Cells[0].Text="Total"; 北京网站设计
e.Item.Cells[1].Text = string.Format("{0:c}", runningTotal); 北京网站建设
} 网站建设
} 北京网页设计
企通互联
在 MyGrid_ItemDataBound 事件句柄中,首先你得使用 ListItemType 判断当前的 DataGridItem 是一个数据项还是AlternatingItem 行。如果是数据项,你调用 CalcTotals,并将 Price 列的值作为参数传递给它;然后你以金额格式对 Price 列进行格式化及着色。 网站建设
北京网站建设
如果 DataGridItem 是页脚,可以用金额格式显示 runningTotal。 北京网站设计
网站制作
总结 网站设计
北京网站设计
在这份指南中,你学到了怎样使用 DataGrid.OnItemDataBound 事件来实现运行时对DataGrid 的某一列进行统计。使用这个事件,你可以创建一个列的合计并可对DataGrid行的页脚进行着色。 网站设计