Use of DataGrid ItemDataBound Event (C#)

原创 2004年08月31日 20:04:00

A DataGrid ItemDataBound event is raised each time an item (row) is data bound to the DataGrid. Once this event is raised, an argument of type DataGridItemEventArgs is passed to the event handling method and the data relevant to this event is available. This data is is no longer available once your application exits the event handling method. The eventhandler for ItemDataBound is OnItemDataBound.We can specify the method that should handle the event which takes the event source object (in our case the datagrid) and the DataGridItemEventArgs as arguments.

This can be explained easily with the help of an example. Consider the case where you want to calculate the total of a column in a datagrid.

First, let us create a data table and add rows to it with the following C# code:

protected DataTable dt = new DataTable("itemprice");
dt.Columns.Add("item",typeof (String));
dt.Columns.Add("price",typeof(float));

DataRow dr; dr = dt.NewRow();

dr["item"]="pen";
dr["price"]=3.5;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr["item"]="camera";
dr["price"]=10.8;
dt.Rows.Add(dr);

dr = dt.NewRow();
dr["item"]="coffee maker";
dr["price"]=40.2;
dt.Rows.Add(dr);

dg.DataSource=dt.DefaultView;
dg.DataBind();< /FONT >


 After binding to the datgrid, the display looks like this:

 
item price
pen 3.5
camera 10.8
coffee maker 40.2
   

 

Since we are using ItemDataBound event to to total up the price column in the data grid, we have to specify on the web form (.aspx) page, the method that would handle the ItemDataBound event (Event wiring). This is acheived by mentioning within the datagrid control tag that on the occurence of the event

(OnItemDataBound), itemDataBound method should be called.

<asp:datagrid id="dg" runat= "server"< /FONT> OnItemDataBound="itemDataBound" ShowFooter="True">

On the code behind file (.aspx.cs), we define the 'itemDataBound' method for handling the ItemDataBound Event.

         float total = 0;           protected void itemDataBound(object sender, DataGridItemEventArgs e)         {                   if  (e.Item.ItemType!=ListItemType.Header && e.Item.ItemType!=ListItemType.Footer)                  {
                    &nbs p; total +=
float.
Parse(e.Item.Cells[1].Text);
                      e.Item.ForeColor = System.Drawing.Color.Blue;
                 }
                 else if
(e.Item.ItemType == ListItemType.Footer)
                {
                     e.Item.Cells[0].Text = "Total";
                     e.Item.Cells[1].Text = total.ToString();
                }
          }

The new datagrid looks like this when rendered on the page:

item price
pen 3.5
camera 10.8
coffee maker 40.2
Total 54.5

How does this code work? The itemDataBound method is called  as each row(item) is bound to the datagrid.
Within the method, we check if the current row is a header or a footer row.To do this we use ListItemType enumeration.
For now, all we need to know is that ListItemType enumeration contains different types of items(header, footer,item, alternating item etc. ) that can be included in a list control (in our case, a datagrid). Therefore, if we want to check if the item bound is a datagrid footer, a simple if statement like this would do the trick:

               if (e.Item.ItemType == ListItemType.Footer) { // your code } 

In our method,  we add the value in the price column to the total if the datagrid item is not a header or footer. Finally, when the datagrid footer is encountered, we display our total on the footer row of the datagrid.This is possible because ItemDataBound event is the last oppurtunity to access the data item before it is displayed in the browser.

c# 学习笔记之九 事件(event)的使用,一个简单例子揭示机理

什么是事件?我们可否看做是一个或者若干个动作?是可以的,比如柚子表白事件,包含几个动作:1.摆柚子2.暖场舞蹈3.拿话筒表白。 一个事件包含几个动作,而每个动作都是一个函数,因为在C#中,函数就是做(...
  • CGGUANG
  • CGGUANG
  • 2016年11月22日 21:10
  • 1852

c#学习笔记之九 事件(event)的使用,一个简单的例子揭示其设计理念

什么是事件?事件就是一系列的动作。比如,柚子表白事件,就有好几个动作:1.摆柚子2.暖场舞蹈3.拿话筒表白。参考这个链接:柚子表白。 理解事件是一系列动作,对理解事件的使用很关键。好了,事件是由一系列...
  • CGGUANG
  • CGGUANG
  • 2016年11月09日 18:40
  • 1644

C#中的委托(Delegate)和事件(Event)

分类:   把C#中的委托(Delegate)和事件(Event)放到现在讲是有目的的:给下次写的设计模式——观察者(Observer)有一个参考。     委托和事件应该是C#相较于...
  • haihsl123456789
  • haihsl123456789
  • 2015年03月13日 22:45
  • 953

C#中的delegate与event简单讲解

一、开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那。好了,那今天就趁月黑风高的夜晚简单来谈谈delegat...
  • liulong1567
  • liulong1567
  • 2015年08月30日 13:56
  • 590

C#中Delegate和Event的实现原理以及用法。

最近做项目,发现一些线程方法异常,查半天没有发现什么的地方能引发这些异常。具体看下面列子。 public class A A a = new A(); A b =a; object.R...
  • a395277988
  • a395277988
  • 2014年09月28日 22:22
  • 418

终于会用c#中的delegate(委托)和event(事件)了

一、开篇忏悔 对自己最拿手的编程语言C#,我想对你说声对不起,因为我到现在为止才明白c#中的delegate和event是怎么用的,惭愧那。好了,那今天就趁月黑风高的夜晚简单来谈谈delegate和...
  • Sayesan
  • Sayesan
  • 2016年03月03日 13:35
  • 503

c# datagridvew绑定数据源

经过各种百度谷歌搜索,终于总结出一下几种绑定datagridview数据源的方法: 1.说明: 俗称数据操作多面手,是Microsoft Visual Studio中的一个控件。使用 DataGr...
  • zhangspring1234
  • zhangspring1234
  • 2013年06月22日 15:56
  • 3936

【C#】事件(Event)

C# 事件(Event) 事件(Event) 基本上说是一个用户操作,如按键、点击、鼠标移动等等,或者是一些出现,如系统生成的通知。应用程序需要在事件发生时响应事件。例如,中断。事件是用于进程间通...
  • MR_XuZhe
  • MR_XuZhe
  • 2017年11月17日 08:55
  • 176

WPF DataGrid使用 自动显示行号、全选、三级联动、拖拽

1.DataGrid的使用自动显示行号(修复删除行时行号显示不正确) View Code dgTool.LoadingRow += new EventHandler(dgTool_Lo...
  • XueminXu
  • XueminXu
  • 2013年11月19日 21:47
  • 1303

C#中的代理委托和event关键字

也叫作委托。事实上,代理就是用于定义指向方法的引用。 比如你在你眼前的程序中要调用另一部分程序的内容(方法或属性),但是,你不能保证函数名或者属性名不发生变化,或者根本程序不可见(不是public或...
  • define_us
  • define_us
  • 2016年06月16日 20:24
  • 601
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Use of DataGrid ItemDataBound Event (C#)
举报原因:
原因补充:

(最多只允许输入30个字)