欢迎光临
我们一直在努力

ASP.NET中为DataGrid添加合计字段-.NET教程,Asp.Net开发

建站超值云服务器,限时71元/月

论坛中最常见的一个问题是:“ 我怎样在 datagrid 中显示列合计?”。 我亲自多次为这个问题提供了示例代码,因此,我想在dotnetjunkies 的标题中提供这么一份指南。 在这份指南中你将会学到怎样在 datagrid 中编程实现对某一列的值进行统计,并在 datagrid 的页脚中显示其合计值。这份指南中供下载的示例中包括了 c# 和 visual basic.net 两种代码。
  
    这份指南的最终结果看起来像这样:
  
   ASP.NET中为DataGrid添加合计字段-.NET教程,Asp.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行的页脚进行着色。 
  

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » ASP.NET中为DataGrid添加合计字段-.NET教程,Asp.Net开发
分享到: 更多 (0)