第一次写博客,是个人意见,请各位大牛看到,指出错误之处!
首先说一说:DataBinder.Eval()的两种形式
一)DataBinder.Eval(Container,"") :第一个是对数据源控件本身行的操作,比如:DataBinder.Eval(Container,"ItemIndex")获取当前是第几行,用来做自动排序很方便.
二)DataBinder.Eval(Container.DataItem,""):第二个是对数据源的行的操作,比如:DataBinder.Eval(Container.DataItem,"Name")这个获取的是绑定本行数据字段是Name的值.
这就可以说,如果你想获取控件本身的属性,使用第一种形式;如果是对数据源的值,使用第二种形式.
说到这,那么Eval()也这有什么联系和区别呢?
然后说说区别:
个人理解是这样的,Eval()其实等同于DataBinder.Eval()的第二种形式:Eval()==DataBinder.Eval(Container.DataItem,""),是对数据源的操作.这下就很好理解了!
想到DataItem这个属性,大家一定想到ItemDataBound事件中常用的一个数据转换方式:
DataRowView row=(DataRowView)e.Item.DataItem;这句话用来获取绑定一行的所有数据,然后获取单个字段数据来做显示转换或其它的用处.
个人理解记忆就是,DataBinder.Eval()方法中的Container与e.Item有异曲同工之妙.Container==e.Item;现在就很好理解DataBinder.Eval()和简化的Eval()的区别的吧.Eval()是 DataBinder.Eval()的一个子集,子集就是DataBinder.Eval(Container.DataItem,"")
到这,大家也许就会有个问题,既然这种形式DataBinder.Eval(Container,"")本身是对控件的行的解析,那么也包含对数据行的绑定吧.是的,如果你一定要使用DataBinder.Eval(Container,"")来做对数据行的操作,可以这样写:DataBinder.Eval(Container,"DataItem.Name"),这样就达到了与第二种形式一样的效果.
同时,这些前台代码用cs文件中的代码解析后,更好理解和记忆,让初学者能理解记忆深刻!
解析代码:DataBinder.Eval(Container,"DataItem.Name")=={
DataRowView row=(DataRowView)e.Item.DataItem;//获取当前行需要绑定的所有数据
this.LblName=row["Name"].ToString(); //这里使用模版列中的Label来显示数据}
当然,DataBinder.Eval()还有多种用法,这里取的是一种效率比较快的方法.其它方法暂不讨论.