论坛中最常见的一个问题是:“ 我怎样在 datagrid 中显示列合计?”。 我亲自多次为这个问题提供了示例代码,因此,我想在dotnetjunkies 的标题中提供这么一份指南。 在这份指南中你将会学到怎样在 datagrid 中编程实现对某一列的值进行统计,并在 datagrid 的页脚中显示其合计值。这份指南中供下载的示例中包括了 c# 和 visual basic.net 两种代码。
这份指南的最终结果看起来像这样:
从上图可看出:
上面所用到的屏幕图片中的 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行的页脚进行着色。
ASP.NET中为DataGrid添加合计字段-.NET教程,Asp.Net开发
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP.NET中为DataGrid添加合计字段-.NET教程,Asp.Net开发
相关推荐
-      VS2010的aspx文件中的html代码的格式化方法
-      .net 反序题目的详细解答第1/2页
-      asp.net创建html文本文件实例
-      比较完整的 asp.net 学习流程
-      官网 Ext direct包中.NET版的问题
-      C# XML操作 代码大全(读XML,写XML,更新,删除节点,与dataset结合等)第1/2页
-      c# 连接字符串数据库服务器端口号 .net状态服务器端口号
-      asp.net教程:简单的C#图片上传代码或C#文件上传代码