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)

 

ContractedBlock.gif ExpandedBlockStart.gif 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)

 

ContractedBlock.gif ExpandedBlockStart.gif 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,
    }

 

 

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

 

e.Row.RowState   ==   (DataControlRowState.Alternate|DataControlRowState.Edit)
 

转载于:https://www.cnblogs.com/hsrzyn/archive/2009/08/15/1546670.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值