• 模板与数据绑定


      嵌入式代码

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

    Hold on, everything is possible.
  • 相关阅读:
    (Java实现) 删数问题
    (Java实现) 车站
    (Java实现) 活动选择
    (Java实现) 过河卒
    (Java实现) 美元汇率
    (Java实现) 零件分组
    (Java实现) 图的m着色问题
    (Java实现) 数塔问题
    Java实现 蓝桥杯VIP 算法训练 数的划分
    DirectUI的消息流转
  • 原文地址:https://www.cnblogs.com/student-note/p/6148420.html
Copyright © 2020-2023  润新知