`

ASP.NET中为DataGrid添加合计字段

阅读更多

  论坛中最常见的一个问题是:“ 我怎样在 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添加超链接、自定义显示示、页脚汇

    本文将详细介绍如何在ASP.NET的DataGrid控件中实现添加超链接、自定义数据显示以及页脚汇总等功能。 ### 添加超链接 在DataGrid中添加超链接,可以让你的数据行变成可点击的链接,从而提供更直观的导航体验。具体...

    ASP.NET常见问题集锦.zip

    ASP.NET中为DataGrid添加合计字段.doc ASP.NET中实现DataGrid数据排序.doc asp.net中的弹出对话框.doc ASP.NET中自定义控件的创建和使用.doc ASP.NET实现用户在线检测的类源码.txt ASP.NET常见问题集锦.zip ...

    ASP.NET_DataGrid_增删改查

    在ASP.NET页面(如DataGrid.aspx)中,你需要先在设计视图或代码视图中添加这个控件,并设置其ID以便在后台代码中引用。 添加DataGrid控件到页面后,你需要配置数据源。这可以通过两种方式实现:一种是使用 ...

    asp.net-datagrid控件实例

    在ASP.NET中,`DataGrid`控件是一个强大的数据展示工具,它允许开发者以表格的形式展示来自数据库或其他数据源的数据。本实例将深入讲解如何使用`DataGrid`控件连接数据库并展示数据。 1. **DataGrid控件简介** `...

    ASP.NET中DataGrid控件应用技巧简述

    ASP.NET中的DataGrid控件是开发Web应用程序时用于展示数据的关键组件,特别是在处理与数据库相关的数据展示场景。熟练掌握DataGrid控件的应用技巧对于任何Web开发者来说都是至关重要的。 DataGrid控件允许以表格的...

    ASP.NET中DataGrid的高级技巧

    可以在DataGrid的模板字段中嵌入其他ASP.NET控件,如TextBox、CheckBox、RadioButton等,以增加交互性和复杂性。 11. **自定义列头**: 通过HeaderStyle和FooterStyle,可以设置列头和列脚的样式,甚至可以添加...

    asp.net 将DataGrid数据写入Excel文件.rar

    在ASP.NET开发中,将DataGrid控件中的数据显示在Excel文件中是一项常见的需求,这主要应用于数据导出、报表生成或者数据分析场景。本教程将详细讲解如何实现这一功能。 首先,我们需要了解DataGrid控件。ASP.NET中...

    ASP.NET中DataGrid的使用指南

    ASP.NET中的DataGrid控件是用于展示表格数据的关键组件,尤其在处理数据库查询结果时非常实用。本指南将深入解析DataGrid的使用方法、属性、事件以及代码片段,旨在帮助初学者快速掌握其核心功能。 一、DataGrid...

    自定义asp.net中DataGrid的一个分页控件

    在ASP.NET开发中,DataGrid控件是一种常用的用于展示数据集合的控件,它提供了诸如排序、分组、筛选等功能。然而,对于大型数据集,为了提高用户体验,分页功能是必不可少的。本教程将详细介绍如何在ASP.NET环境中,...

    动态的管理ASP.NET DataGrid数据列

    在ASP.NET的DataGrid数据显示控件编程中,我们有几种方式可以增加DataGrid columns。其中最常见的方法是在web forms设计器中增加,通过在控件工具箱中拖访DataGrid控件到web设计页面,然后在属性生成器中增加Columns...

    vb.net与datagrid

    本篇文章将深入探讨`vb.net`与`datagrid`的相关知识点,帮助初学者更好地理解和运用这个强大的工具。 首先,`DataGridView`的创建和基本设置是入门的第一步。在VB.NET中,可以使用Visual Studio的设计界面直接拖放`...

    ASP.NET中DataGrid控件的使用技巧

    ASP.NET中的DataGrid控件是Web开发中常用的数据展示组件,尤其在处理表格数据时,它的强大功能使得数据呈现和操作变得简单易行。本文将深入探讨如何利用DataGrid控件实现数据排序、自动编号、生成合计项以及将数据...

    ASP.NET2.0 DataGrid的漂亮的分页

    ASP.NET 2.0 DataGrid控件是微软.NET框架中用于数据展示的重要组件,尤其在构建Web应用程序时,它的分页功能对于处理大量数据至关重要。本篇将详细讲解如何实现ASP.NET 2.0 DataGrid的漂亮分页,并探讨VS 2005中分页...

    ASP.NET中Datagrid常见错误

    ### ASP.NET中Datagrid常见错误解析 #### 一、概述 Datagrid 控件作为ASP.NET中最强大且用途广泛的Web控件之一,在实际开发过程中被广泛使用。然而,由于其复杂的功能性和灵活性,开发者在使用过程中很容易遇到...

    ASP.NET-DataGrid

    ASP.NET DataGrid 是一个强大的控件,用于在Web应用程序中展示和操作数据。它允许开发者以网格形式组织和呈现数据库中的信息,同时提供多种交互功能,如排序、分页、编辑和选择。以下是对DataGrid控件的详细解释及其...

    asp.net DataGrid所有的功能讲解实现.rar

    ASP.NET DataGrid控件是微软.NET Framework中用于展示和操作数据的一种强大工具,它提供了丰富的功能,便于在网页上创建动态、交互式的表格。在这个"asp.net DataGrid所有的功能讲解实现.rar"压缩包中,包含了多个...

    ASP.NET取代DataGrid的ListView强悍用法示例(动态增加行 下拉框联动)

    ASP.NET中的ListView控件是.NET Framework 3.5版本引入的一个强大的数据绑定控件,它在功能上远超传统的DataGrid控件,提供了更灵活的数据呈现方式和更丰富的用户界面定制能力。本示例将详细介绍如何利用ListView...

    ASP.NET-DataGrid---vs2003

    ASP.NET DataGrid 是微软在 .NET Framework 中提供的一款强大的数据绑定控件,它主要用于在网页上展示和操作结构化数据。在Visual Studio 2003这个开发环境中,DataGrid 提供了丰富的功能,包括数据的分页、排序、...

    ASP.NET中DataGrid的高级技巧 Demo code-20050118

    ASP.NET中的DataGrid控件是Web开发中常用的数据展示组件,尤其在早期版本的ASP.NET中,它在数据绑定和自定义显示方面扮演了重要角色。这个“ASP.NET中DataGrid的高级技巧 Demo code-20050118”的压缩包文件,很可能...

Global site tag (gtag.js) - Google Analytics