• ASP.NET数据绑定控件简介



    数据绑定分为数据源和数据绑定控件两部分(①数据绑定控件通过数据源获取和修改数据②数据绑定控件通过数据源隔离数据提供者和数据使用者)
    数据绑定控件→数据源→数据库

    数据源:
    SqlDataSource(连接SQL数据库): 页面禁止直连数据库
    AccessDataSource(连接Access数据库): 页面禁止直连数据库
    ObjectDataSource(连接类): Web开发中应用最广/易于数据库切换
    LinqDataSource(连接Linq): 很少
    EntityDataSource: 很少
    XmlDataSource(连接XML): 处理XML数据时
    SiteMapDataSource: SiteMap专用数据源

    数据绑定控件(重要:ListView(大一统者/推荐) & Repeater):
    列表数据绑定控件(DropDownList RadioButtonList CheckBoxList ListBox BulletedList)
    复杂绑定控件(DataGrid GridView DetailsView FormView ListView  Repeater DataList)
    ObjectDataSource
    ObjectDataSource: 用于将一个类(主要为强类型DataSet)作为数据源
    .TypeName: 数据源类名
    .DeleteMethod/.InsertM/.SelectM/.UpdateM: 删除/插入/查询/更新
    .DeleteParameters/.InsertP/.SelectP/.UpdateP: 相应参数
    生成ObjectDataSource: 通过界面自动生成(手写太麻烦)
    Bug: ①绑定Id为Guid类型时会生成下列代码 删除即可
    DataObjectTypeName=“System.Guid”
    DropDownList
    DropDownList控件: 显示来自于数据源的数据/两种方法
    界面生成(推荐)
    代码绑定(可绑定任何实现IEnumerable接口的数据)
      BulletedList2.DataSource = new int[] { 1,3,5,7,9 };
      BulletedList2.DataBind();
    .AppendDataBoundItems(bool值): 附加选项(设置”请选择人员”项)
            在数据绑定之后附加“--Please Select--” eg:
            DropdownList1.DataBind();
            DropdownList1.Items.Insert(0,new ListItem("--Please Select--",0));//insert能插在任何地方
            DropdownList1.Items.Insert(0,"--Please Selcet--");//一种重载方式,注意必须写在刷新数据(DataBind()之后才有效)
            DropdownList1.Items.Add("--please selcet--");//add只能加在末尾
            DropdownList1.Items.Add(new ListItem("--please select--","All");//Add的重载,第二个参数是 string value.
    DadioButtonList CheckBoxList ListBox BulletedList等雷同
    Repeater
    Repeater控件: 用于对绑定数据源中的数据进行遍历显示(foreach)
    <ItemTemplate>模板
      <ItemTemplate>主键:<%#Eval(“Id”) %>姓名: <%#Eval(“UserName”) %> 年龄: <%#Eval(“Age”) %><br /></ItemTemplate>
    Repeater模板:
    <ItemTemplate>
    <AlternatingItemTemplate> 隔行不同显示风格
    <HeaderTemplate> 头部模板
    <FooterTemplate> 尾部模板
    <SeparatorTemplate> 分割模板
    DataBinder类: 提供对应用程序快速开发(RAD)设计器的支持以生成和分析数据绑定表达式语法
    ①无法继承
    ②在Web窗体页数据绑定语法中可以使用此类的重载静态Eval方法(返回值object/该方法提供自动类型转换/服务器响应时间较长)
    .ItemDataBound事件(e.Item(RepeaterItem类的实例)): 某一项被数据绑定后但尚未呈现在页面上之前发生
    获取绑定数据
      DataRowView rowView = (DataRowView)e.Item.DataItem;
      var personRow = (ASP.NET入门.objectDataSource..DAL.DataSetPersons.T_PersonsRow)rowView.Row;
    RepeaterItem.FindControl() 获取模板中控件(模板中控件无法通过Id直接获取)
    DataTable & DataView & DataSet三者关系:
    DataTable 表示内存中数据的一个表
    DataView 表示用于排序 筛选 搜索 编辑 导航的DataTable的可绑定数据的自定义视图(一个主要功能是允许在Windows窗体和Web窗体上进行数据绑定)
    DataSet ADO.NET核心成员之一(各种数据源在内存中的映射)
    .ItemCommand事件: 当单击Repeater控件中的按钮时发生
    e.CommandName 命令名称(对应Button.CommandName)
    e.CommandArgument 命令参数(对应Button.CommandArgument)
    e.CommandSource
    Template中的Button按钮: 通过传递<Button>的CommandName CommandArgument属性值获得当前绑定数据信息并进行处理(此处Button按钮响应Repeater控件的ItemCommand事件)
    ListView
    ListView控件: Repeater控件一般只用于展示数据 如果要增删改查则使用ListView更方便
    ListView模板:
    <ItemTemplate> 奇数行模板
    <AlternatingTemplate> 偶数行模板
    <EmptyDataTemplate>
    <InsertItemTemplate> 插入行模板/<%#Bind() %>双向绑定
    <EditItemTemplate> 编辑模板行/<%#Bind() %>双向绑定
    <LayoutTemplate> ItemPlaceHolder
    生成ListView: 一般利用界面自动生成
    调整ListView: ①表头汉化②style样式③简化数据展示④
    ListView中的数据校验: <Template>模板内编组
    .ItemDataBound事件(e.Item(ListViewDataItem类的实例)): 某一项被数据绑定后但尚未呈现在页面上之前发生
    获取绑定数据
      ListViewDataItem  lvDataItem = (ListViewDataItem)e.Item;
      DataRowView rowView = (DataRowView)lvDataItem.DataItem;
      var row = (ASP.NET入门.objectDataSource..DAL.DataSetPersons.T_PersonsRow)rowView.Row;
    .ItemCreated事件: 在ListView控件中创建项时发生
    ①ListView新增数据行的默认值设置: 响应ListView的ItemCreated事件 当e.Item.ItemType为InsertItem的时候通过e.Item.FindControl()方法找到控件并初始化(如年龄)
    .ItemInserting事件: 在请求插入操作之后 ListView控件执行插入之前发生
    ①插入数据初始化(Guid): 响应ListView的ItemInserting事件 e.Values为所有字段的键值对(可读可写) e.Values[“Id”]=Guid.NewGuid();
    ②该事件也可进行数据校验 通过e.Cancel=true来取消非法数据插入
    .ItemUpdating事件: 在请求更新操作且ListView控件更新项之后发生
    e.OldValues—更新前的值 e.NewValues—更新后的值
    e.ItemIndex—当前更新行行号
    ListView控件中的DropDownList绑定问题: 值的编程处理
    ①显示数据时(响应ItemCreated事件)
    ②插入数据时(响应ItemInserting事件)
    ③更新数据时(响应ItemUpdating事件)
    ListView控件中的行命令按钮: ①ListView.DataKeyNames属性(主键字段/可以设置多个/与数据库”主键”无直接关系)
    ①长一岁
      int index = ((ListViewDataItem)e.Item).DisplayIndex;
      Guid id = ListView1.DataKeys[index];
      if(e.CommandName == “IncAge”)
      {
        T_PersonsTableAdapter adapter = new T_PersonsDataAdapter();
        adapter.IncAge(id);
        ListView1.DataBind();
      }
    ②ListView内置排序机制(效率低/在<LayoutTemplate>中表头放置一个”CommandArgument=排序字段” “CommandName=sort”的服务器端按钮控件即可
    DataPager控件: 实现分页
    ①两种方式: 声明在ListView中/设置DataPager的PagedControlId为要分页的ListView(二者无嵌套关系)
    ②实现IPageableItemContainer接口的控件都可以使用DataPager进行分页(ASP.NET内置控件目前只有ListView实现了这个接口)
    ③.PageSize属性: 每页条目数
    ④.QueryStringField属性: DataPager默认PostBack机制 显示不到地址中因此不利于分享 设置该属性就可以实现超链接形式的分页链接
    ⑤<Fields>: 按钮显示风格/实现<<  <  …4 5 6…  >  >>效果
      <asp:NextPreviousPagerField>
      <asp:NumericPagerField>
      <asp:TemplatePagerField>
    ListView控件中的高效分页:
    ①ListView内置分页机制先从数据源取得所有数据再截取当前部分(低效率)
    ②SQL分页编程
      步骤一: 增加强类型DataSet中两个方法: ①数据条目数 ②取N到M条数据
        ①QueryCount
        select count(*) from T_Persons  //由于数据集编辑器不支持开窗函数 第二种方法中需自行添加参数startRowIndex maximumRows(必须是这两个参数名(回调函数) 由ObjectDataSource的//startRowIndexParameterName maximumRowsParameterName确定)
        ②GetPagedData
        select * from (select Id, Name, Age, row_number() over(order by Id) RowNum from T_Persons)t where t.RowNum>@startRowIndex and t.RowNum<=@startRowIndex + @maximumRows
      步骤二: 配置ObjectDataSource
      步骤三: 配置ListView
      步骤四: 配置ObjectDataSource
        ①删除<SelectParameters>
        ②增加SelectMethod=“GetPagedData” SelectCountMethod=“QueryCount”
        ③设置EnablePaging=“true”
    ListView控件中的单独页面编辑: ListView的在位编辑只适合少量字段 对于复杂数据的ListView只展示关键字符按 其他字段的编辑 插入 查看等要在单独页面中进行
    FormView控件: 使用用户定义的模板显示数据源中单个记录的值
    ①模板: <EditItemTemplate><ItemTemplate><InsertItemTemplate>
    ②获取模板中控件
      //响应ListView1的ItemCreated事件
      If(FormView1.CurrentMode == FormViewMode.Insert)
      {
        ListView1.FindControl(“”);
      }
    ③.ChangeMode(FormViewMode newMode): 模式切换
    单独页面编辑步骤:
    步骤一:
      创建一个单独页面***.aspx 其中创建ObjectDataSource FormView类的实例
    步骤二:
      设置ListView的InsertPosition属性为”none” 并创建导向***.aspx的新增 编辑 查看超链接(?Id=<%#Eval(“Id”) %>&action=…)
    步骤三:
      强类型DataSet中增加GetDataById()方法 然后配置ObjectDataSource的select方法使用GetDataById()方法 参数传递Id参数的值 参数源”QueryString” QueryStringField:Id
    步骤四:
      ***.aspx中根据action参数值切换FormView状态 并进行相关设置(编辑:完成后导向回ListView界面 插入:完成后导向回ListView列表界面 查看:删除操作超链接)
    步骤五:
      细化单独页面编辑: ①删除Id 并且Inserting中为Id赋值Guid ②插入完成 更新完成后重定向到ListUI ③DropDownList绑定 ④JQuery日期控件的绑定(服务器端绑定 浏览器端绑定两种)
    问题
    src=‘<%#Eval(“Path”) %>’: 对于服务器端控件 <%...%>只能单独存在(无法拼接字符串如’images/<%#Eval(“Path”) %>’)
    解决方法
      protected string FormatImgUrl(object url)
      {
        return ResolveClientUrl(“~/objectdatasource/images/” + url);
      }

  • 相关阅读:
    opencv 编译
    uniapp中使用xgplayer直播、讨论区的简单实现、第三方复制功能
    20192422李俊洁 实验八 Web安全
    PaddleSpeech 安装(ubuntu 20.04)并尝鲜其中的 TTS 功能
    webstorm 自动导入时始终使用单引号
    音视频字幕生成和翻译
    PaddleSpeech TTS 资料汇总
    vue中更新两个不相关组件的方法
    vue关闭ESlint
    两个数组 过滤出另一个数组中的值的方法
  • 原文地址:https://www.cnblogs.com/minghualiyan/p/3520476.html
Copyright © 2020-2023  润新知