天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

ASP.NET中為DataGrid添加合計(jì)字段

  論壇中最常見的一個(gè)問題是:“ 我怎樣在 DataGrid 中顯示列合計(jì)?”。 我親自多次為這個(gè)問題提供了示例代碼,因此,我想在DotNETJunkies 的標(biāo)題中提供這么一份指南。 在這份指南中你將會(huì)學(xué)到怎樣在 DataGrid 中編程實(shí)現(xiàn)對某一列的值進(jìn)行統(tǒng)計(jì),并在 DataGrid 的頁腳中顯示其合計(jì)值。這份指南中供下載的示例中包括了 C# 和 Visual Basic.NET 兩種代碼。

  這份指南的最終結(jié)果看起來像這樣:


  從上圖可看出:

  上面所用到的屏幕圖片中的 DataGrid 是一個(gè)非常典型的 DataGrid 。有許多控制 DataGrid 外觀的屬性,它使用兩個(gè) BoundColumns 來操作數(shù)據(jù),但這并不是最重要的。做好這項(xiàng)工作真正重要的是使用 DataGrid.OnItemDataBound 事件。這個(gè)事件將會(huì)觸發(fā)每次綁定一條記錄到 DataGrid。你可以為這個(gè)事件創(chuàng)建一個(gè)事件處理,以操作數(shù)據(jù)記錄。在這種情況下,你將會(huì)得到運(yùn)行時(shí) Price 列的合計(jì)值。

  頁腳指的是數(shù)據(jù)范圍的最后一行。當(dāng)這行被限定時(shí),在事件句處理你可以得到 Price 列的運(yùn)行時(shí)統(tǒng)計(jì)值。

  實(shí)施

  首先讓我們找到一種方法來操作 Web 窗體輸出。 這份指南中,你將使用一個(gè) Web 窗體 (calcTotals.ASPx) 以及一個(gè)類代碼文件 (calcTotals.ASPx.cs)。這份指南的意圖是, 類代碼將會(huì)使用 Just-In-Time 編譯器來編譯。 這里是 calcTotals.ASPx 的代碼:

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


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

ASP:BoundColumn>
ItemStyle-HorizontalAlign="Right"
HeaderStyle-HorizontalAlign="Center" />

ASP:DataGrid>


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

  最后指定的屬性之一是 OnItemDataBound 屬性。這個(gè)事件將會(huì)在 OnItemDataBound 事件發(fā)生時(shí)被觸發(fā)。

  Web 窗體中的 DataGrid (MyGrid) 包含有兩個(gè) BoundColumns,一個(gè)是 Title ,另一個(gè)是Price。 這里將顯示 Pubs 數(shù)據(jù)庫(SQL Server)中 Titles 表的 title 及 price 列。

  忽略代碼的定義

  類代碼在所有的地方都將使用。在類代碼中,你可以操作兩個(gè)事件:Page_Load 事件以及 MyGrid_OnItemDataBound 事件。還有一個(gè)私有方法 CalcTotal, 用它來簡單的完成運(yùn)行時(shí)統(tǒng)計(jì)的數(shù)學(xué)運(yùn)算。

  類代碼基本結(jié)構(gòu)塊的起始部分:

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;
 }
}

  在類代碼的基本結(jié)構(gòu)中,你必須使用相關(guān)語句導(dǎo)入名字空間(namespace)。在類聲明中,你聲明了兩個(gè)變量,一個(gè)是類代碼中映射 Web 窗體的 DataGrid(MyGrid)控件的變量;一個(gè)是用來操作 DataGrid 的 Price 列中運(yùn)行時(shí)統(tǒng)計(jì)的雙精度值。

  Page_Load 事件

  在 Page_Load 事件中,你所要做的就是連接到 SQL Server 并執(zhí)行一個(gè)簡單的 SqlCommand。 你取得了所有 Price 值>0 的 title 和 price 數(shù)據(jù)。你使用 SqlCommand.ExecuteReader 方法返回一個(gè) SqlDataReader 并將其直接綁定到 DataGrid (MyGrid)。

protected void Page_Load(object sender, EventArgs e)
{
 SqlConnection myConnection = new SqlConnection("server=Localhost;database=pubs;uid=sa;pwd=;");//創(chuàng)建SQL連接
 SqlCommand myCommand = new SqlCommand("SELECT title, price FROM Titles WHERE price > 0", myConnection);//創(chuàng)建SQL命令

 try
 {
  myConnection.Open();//打開數(shù)據(jù)庫連接
  MyGrid.DataSource = myCommand.ExecuteReader();//指定 DataGrid 的數(shù)據(jù)源
  MyGrid.DataBind();//綁定數(shù)據(jù)到 DataGrid
  myConnection.Close();//關(guān)閉數(shù)據(jù)連接
 }
 catch(Exception ex)
 {
  //捕獲錯(cuò)誤
  HttpContext.Current.Response.Write(ex.ToString());
 }
}

  CalcTotals 方法

  CalcTotals 方法用來處理 runningTotal 變量。這個(gè)值將以字符串形式來傳遞。 你需要將它解析為雙精度型,然后 runningTotal 變量就成了雙精度類型。

private void CalcTotal(string _price)
{
 try
 {
  runningTotal += Double.Parse(_price);
 }
 catch
 {
  //捕獲錯(cuò)誤
 }
}

  MyGrid_ItemDataBound 事件

  MyGrid_ItemDataBound 事件在數(shù)據(jù)源中每行綁定到 DataGrid 時(shí)被調(diào)用。在這個(gè)事件處理中,你可以處理每一行數(shù)據(jù)。 這里你的目的是,你將需要調(diào)用 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 判斷當(dāng)前的 DataGridItem 是一個(gè)數(shù)據(jù)項(xiàng)還是AlternatingItem 行。如果是數(shù)據(jù)項(xiàng),你調(diào)用 CalcTotals,并將 Price 列的值作為參數(shù)傳遞給它;然后你以金額格式對 Price 列進(jìn)行格式化及著色。

  如果 DataGridItem 是頁腳,可以用金額格式顯示 runningTotal。

  總結(jié)

  在這份指南中,你學(xué)到了怎樣使用 DataGrid.OnItemDataBound 事件來實(shí)現(xiàn)運(yùn)行時(shí)對DataGrid 的某一列進(jìn)行統(tǒng)計(jì)。使用這個(gè)事件,你可以創(chuàng)建一個(gè)列的合計(jì)并可對DataGrid行的頁腳進(jìn)行著色。

ASP:BoundColumn>

AspNet技術(shù)ASP.NET中為DataGrid添加合計(jì)字段,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 成 人 片 免费播放 成 人 免费 黄 色 网站无毒下载 | 护士美女照片 | 脱女学小内内摸出水网站免费 | 国产性夜夜春夜夜爽1A片 | 热99RE久久精品国产 | 国产69精品久久久久无码麻豆 | 漂亮的保姆6在线观看中文 漂亮的保姆5电影免费观看完整版中文 | 最近免费中文字幕MV免费高清 | 伊人久久大香线蕉综合bd高清 | 国内精品乱码卡一卡2卡三卡新区 | 欧美巨大巨粗黑人性AAAAAA | 99re这里只有精品视频 | 天堂岛www天堂资源在线 | 精精国产www视频在线观看免费 | bl高h肉文| 国产又黄又硬又粗 | 国产精彩视频在线 | 国产美熟女乱又伦AV | 国产爱豆剧果冻传媒在线 | 国产人妻人伦精品A区 | xfplay 无码专区 亚洲 | 最近免费中文字幕MV免费高清 | 午夜影视不用充钱的免费 | 亚欧成人毛片一区二区三区四区 | 国产亚洲精品AV片在线观看播放 | 久爱在线中文在观看 | 性XXXXX搡XXXXX搡景甜 | 91精品国产免费入口 | 久久99r66热这里只有精品 | wwwav在线 | 亚洲午夜精品A片久久软件 亚洲午夜精品A片久久不卡蜜桃 | 日本亚洲电影 | 中文日产无乱码AV在线观 | 久久热在线视频精品1 | 久久久久久久久人体 | 亚洲欧美日本中文子不卡 | 亚洲精品无码不卡 | 亚洲中文字幕无码一去台湾 | 成人亚洲精品 | 久久久性色精品国产免费观看 | 精品久久久久久久国产潘金莲 |