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)
// 摘要:
// Specifies the function of a row in a data control, such as a System.Web.UI.WebControls.DetailsView
// or System.Web.UI.WebControls.GridView control.
public enum DataControlRowType
{
// 摘要:
// 数据控件的标题行。标题行不能绑定数据。
Header = 0,
//
// 摘要:
// 数据控件的脚注行。脚注行不能绑定数据。
Footer = 1,
//
// 摘要:
// 数据控件的数据行。只有 System.Web.UI.WebControls.DataControlRowType.DataRow 行能绑定数据。
DataRow = 2,
//
// 摘要:
// 行分隔符。行分隔符不能绑定数据。
Separator = 3,
//
// 摘要:
// A row that displays pager buttons or a pager control. Pager rows cannot be
// data-bound.
Pager = 4,
//
// 摘要:
// The empty row of a data-bound control. The empty row is displayed when the
// data-bound control has no records to display and the EmptyDataTemplate template
// is not null.
EmptyDataRow = 5,
}
2、DataControlRowState
关于这个也存在类似问题,在判断的时候写的是if(e.Row.RowState == DataControlRowState.Normal) 结果只有单数行的数据执行了,双数行的数据就没有反应,从Normal字面上我以为就是正常状态,仔细一看注释
Alternate除外,改成if (e.Row.RowState == DataControlRowState.Normal || e.Row.RowState == DataControlRowState.Alternate)就没问题了
查看代码如下(DataControlRowState)
// 摘要:
// 指定数据控件(例如 System.Web.UI.WebControls.DetailsView 或 System.Web.UI.WebControls.GridView)中行的状态。
[Flags]
public enum DataControlRowState
{
// 摘要:
// 指示该数据控件行处于正常状态。System.Web.UI.WebControls.DataControlRowState.Normal 状态与其他状态相互排斥,但
// System.Web.UI.WebControls.DataControlRowState.Alternate 状态除外。
Normal = 0,
//
// 摘要:
// 指示该数据控件行是交替行。
Alternate = 1,
//
// 摘要:
// 指示该行已被用户选定。
Selected = 2,
//
// 摘要:
// 指示该行处于编辑状态,这通常是单击行的“编辑”按钮的结果。通常,System.Web.UI.WebControls.DataControlRowState.Edit
// 和 System.Web.UI.WebControls.DataControlRowState.Insert 状态互相排斥。
Edit = 4,
//
// 摘要:
// 指示该行是新行,这通常是单击“插入”按钮添加新行的结果。通常,System.Web.UI.WebControls.DataControlRowState.Insert
// 和 System.Web.UI.WebControls.DataControlRowState.Edit 状态互相排斥。
Insert = 8,
}