ASP.NET中為DataGrid添加合計欄位_實用技巧

來源:互聯網
上載者:User
  論壇中最常見的一個問題是:“ 我怎樣在 DataGrid 中顯示列合計?”。 我親自多次為這個問題提供了範例程式碼,因此,我想在DotNetJunkies 的標題中提供這麼一份指南。 在這份指南中你將會學到怎樣在 DataGrid 中編程實現對某一列的值進行統計,並在 DataGrid 的頁尾中顯示其合計值。這份指南中供下載的樣本中包括了 C# 和 Visual Basic.NET 兩種代碼。

  這份指南的最終結果看起來像這樣:


  從上圖可看出:

  上面所用到的螢幕圖片中的 DataGrid 是一個非常典型的 DataGrid 。有許多控制 DataGrid 外觀的屬性,它使用兩個 BoundColumns 來操作資料,但這並不是最重要的。做好這項工作真正重要的是使用 DataGrid.OnItemDataBound 事件。這個事件將會觸發每次綁定一條記錄到 DataGrid。你可以為這個事件建立一個事件處理,以操作資料記錄。在這種情況下,你將會得到運行時 Price 列的合計值。

  頁尾指的是資料範圍的最後一行。當這行被限定時,在事件句處理你可以得到 Price 列的運行時統計值。

   實施

  首先讓我們找到一種方法來操作 Web Form輸出。 這份指南中,你將使用一個 Web Form (calcTotals.aspx) 以及一個類代碼檔案 (calcTotals.aspx.cs)。這份指南的意圖是, 類代碼將會使用 Just-In-Time 編譯器來編譯。 這裡是 calcTotals.aspx 的代碼:

<%@ Page Inherits="myApp.calcTotals" Src="20010731T0101.aspx.cs" %>


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">


ItemStyle-HorizontalAlign="Right"
HeaderStyle-HorizontalAlign="Center" />




  在 Web Form中你使用 @ Page 來直接聲明這個頁所繼承的類代碼。SRC 屬性指明了類代碼將使用 JIT 編譯器來編譯。 Web Form中的大部分代碼樣式聲明用來使 DataGrid 外觀變得更好看。

  最後指定的屬性之一是 OnItemDataBound 屬性。這個事件將會在 OnItemDataBound 事件發生時被觸發。

  Web Form中的 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 Form的 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行的頁尾進行著色。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.