首页 > 代码库 > 模板与数据绑定

模板与数据绑定

  嵌入式代码

    格式为:<% %>
    原理是当成文本通过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...........
  }

模板与数据绑定