Gridview_RowDataBound中的DataControlRowType 和 DataControlRowState

Title
1、DataControlRowType 枚举

 


刚开始学习Asp.NET,遇到的问题还真不少,幸好有前人铺路,网上的解决办法也挺多的,现在此做些笔记

在给GirdView绑定完数据后要处理某些数据,此时用到GridView_RowDataBound事件,
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
最初的代码是Copy来的,一直没注意,copy几次之后就自己写了,问题随之就出现了,报错:“
用户代码未处理 System.NullReferenceException
  Message="Object reference not set to an instance of an object."
和之前copy的文件一对比,发现它的是在  if (e.Row.RowType == DataControlRowType.DataRow)之内写的,
就上网查看了这个东西是做什么的,下面是msdn上的解释(http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.datacontrolrowtype.aspx

 

//////------------------------------------------------------------
指定数据控件(例如 DetailsView 或 GridView 控件)中行的功能。
命名空间:   System.Web.UI.WebControls
程序集:  System.Web(在 System.Web.dll 中)
C#
public enum DataControlRowType
  成员
 成员名称 说明
 


成员名称

说明


Header

数据控件的标题行。标题行不能绑定数据。


Footer

数据控件的脚注行。脚注行不能绑定数据。


DataRow

数据控件的数据行。只有 DataRow 行能绑定数据。


Separator

行分隔符。行分隔符不能绑定数据。


Pager

显示页导航按钮或页导航控件的行。页导航行不能绑定数据。


EmptyDataRow

数据绑定控件的空行。当数据绑定控件没有可显示的记录并且 EmptyDataTemplate 模板不为 nullNothingnullptrnull 引用(在 Visual Basic 中为 Nothing 时显示空行。


  备注
DataControlRowType 枚举标识数据控件中行的功能。 DetailsView 和 GridView 控件使用它在显示数据的行与显示其他用户界面 (UI) 元素(例如标题行、行分隔符或页导航按钮)的行之间进行区分。
在枚举 GridViewRowCollection 或 DetailsViewRowCollection 集合时可以使用 DataControlRowType 枚举来标识 GridViewRow 或 DetailsViewRow 对象的类型。如果您要编写一个创建行的数据控件,可以使用 DataControlRowType 枚举来标识控件中不同行的功能。

//////------------------------------------------------------------
第一次绑定事件发生在gridview的header里面,而这里面有没有放置控件,所以总是得到null,并且赋值的话就会"未将对象引用设置到对象的实例”(引自http://topic.csdn.net/u/20080806/09/eae2f9c8-b5b9-49ab-92d9-3fca35cbfd4c.html),这就是原因了……

这个是查看代码得到的(DataControlRowType)

 

DataControlRowType

 

2、DataControlRowState
 关于这个也存在类似问题,在判断的时候写的是if(e.Row.RowState == DataControlRowState.Normal) 结果只有单数行的数据执行了,双数行的数据就没有反应,从Normal字面上我以为就是正常状态,仔细一看注释

 Alternate除外,改成if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)就没问题了

查看代码如下(DataControlRowState)

 

DataControlRowState

 

 

RowState即是Alternate又是Edit的状态判断语法:

 

e.Row.RowState   ==   (DataControlRowState.Alternate|DataControlRowState.Edit)
 
posted @ 2009-08-15 10:56  hsrzyn  阅读(1231)  评论(0编辑  收藏  举报