Gridview_RowDataBound中的DataControlRowType 和 DataControlRowState
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)
2、DataControlRowState
关于这个也存在类似问题,在判断的时候写的是if(e.Row.RowState == DataControlRowState.Normal) 结果只有单数行的数据执行了,双数行的数据就没有反应,从Normal字面上我以为就是正常状态,仔细一看注释
Alternate除外,改成if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)就没问题了
查看代码如下(DataControlRowState)