首页 > 代码库 > 模板与数据绑定
模板与数据绑定
嵌入式代码
格式为:<% %>
原理是当成文本通过HtmlTextWriter的Write方法输出
嵌入式表达式
格式<%= %>
不能给属性赋值
绑定表达式
格式<%# %>
当控件的DataBinding事件触发的时候,会调用这个表达式
在ASP.NET中如果一个属性的类型是ITemplate,那么,这个属性就是一个模板成员
在Repeater中的ItemTemplate属性上,使用了下述标签
[TemplateContainerAttribut(typeof(RepeaterItem))]
说明通过模板创建的子控件会被包装在类型为RepeaterItem的控件之中,
还可以通过Container.DataItem来获取当前绑定的数据
DataBinder.Eval(Object container,string expression,string format);
expression 属性,可以是属性对象的属性,必须为public
format 相当于执行了string.Format操作
Page.Eval(string expression,string format)
方法定义如下
protected internal string Eval(string expression,string format)
{
CheckPageExists();
return DataBinder.Eval(Page.GetDataItem(),expression,format);
}
可以看到Eval调用的还是DataBinder.eval只是访问的对象不同了而已
DataSource
public virtual Object DataSource{get;set;}
需要显示调用DataBind()方法来绑定数据
然后就会触发两个事件
1.ItemCreated
表示项已经被创建了,可以访问到其中的控件了
2.ItemDataBound
表示绑定表达式已经被计算了
那我们可以在哪里访问到绑定后的值?
1.Controls 生成的所有的控件
2.Items 仅仅只是RepeaterItem对象
回发
将从视图状态中重新构建原来的对象,只是触发ItemCreated事件,并不触发ItemDataBound事件
那如果我们点击了模板中的按钮怎么搞?
这个时候就会触发按钮的Click事件了,然后按钮的事件通过事件冒泡传递到了夫控件的事件中
那这个时间就是ItemCommand事件
可是又有一个问题来了,那就是一个模板不可能就只有一个按钮啊,为了解决这个问题,在Button
中有两个属性CommandName,CommandArgument
这样子我们就可以在ItemCommand事件中通过CommandName属性来进行判断了
DataList和Repeter的不同
Repeater 中没有对应的增删改查事件,需要自己在ItemCommand事件中根据事件属性来判断,所有也不可以修改数据
DataList 是所有控件中唯一支持分栏的控件,分栏通过下面的三个属性进行控制
RepeatColumns 分栏数
RepeatDirection 分栏的方向
RepeatLayout 布局方向
GridView 它的目的就是用来生成表格,它把项目分成了很多列,每个列都可以单独定义针对此列的模板所有的模板构成了GridView的Columns集合
GridView的模板有 5种类型,派生自DataControlField这个抽象基类
TemplateField
ImageField
BoundField
ButtonFieldBase
HyperLinkField
使用BindingDirection.TwoWay 表示支持双向绑定并实现了接口IBindableTemplate
定义
public interface IBindableTemplate:ITemplate
{
IOrderdDictionary ExtractValues(Control container);//获取双向绑定的值,以名值对的字典形式提供
void InstantiateIn(Control container);
}
同时GridView还支持分页,主要的属性如下
AllowPaging 是否启用分页
PageIndex 当前页数
PageCount
PageSize 每页显示数据量,默认为10
还可以通过设置PagerSettings-Mode来改变分页按钮的显示
NextPrevious
NextPreviousFirstLast
Numeric
NumericFirstLast
FirstPageText
PreviousPageText
NextPageText
LastPageText
事件
PagerTemplate
PagerSettings
PageIndexChanging
PageIndexChanged
同时还支持排序,可以通过下面的属性/方法来操作
AllowSorting 是否支持排序
SortExpression
Sorting
Sorted
ListView和DataPager 很强悍的组合
对象数据源ObjectDataSource派生自DataSourceControl对象类型
为了方便通过反射来找到对应的方法,我们使用业务对象的标签,
ComponentModel
用来将每一类型标识为适合绑定到ObjectDataSource对象的对象
DataObjectMethodAttribute
有5种枚举类型的操作
例如
[System.ComponentModel.DataObjectMethod(System.ComponentModel.DataObjectMethodType.Select,true)]
public void Select()
{
dosomthing...........
}
模板与数据绑定