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);
}
ASP.NET数据绑定控件简介的更多相关文章
- ASP.NET数据绑定控件
数据绑定控件简介 数据绑定分为:数据源 和 数据绑定控件 两部分,数据绑定控件通过数据源来获得数据,通过数据源来隔离数据提供者和数据使用者,数据源有:SqlDataSource,AccessDataS ...
- 028. asp.net数据绑定控件值DataList控件
DataList控件可以使用模板与定义样式来显示数据并进行数据的选择, 删除及编辑工作. DataList控件的最大特点是一定要通过模板来定义数据的显示格式. 如果要设计出美观的界面, 就需要花费一番 ...
- asp.net学习之数据绑定控件、数据源控件概述
原文:asp.net学习之数据绑定控件.数据源控件概述 1.asp.net数据绑定控件分为三大类,每个类分别进行详细: ● 列表式数据绑定控件: 列表式数据绑定控件常用来在一个表格内的一个字 ...
- ASP.NET服务器端控件(class0617)
ASP.Net服务端基本控件介绍 ASP.Net服务端控件是ASP.Net对HTML的封装,在C#代码中就可以用txt1.Text=‘abc’这种方式来修改input的值,ASP.Net会将服务端控件 ...
- 027. asp.net中数据绑定控件之 GridView控件
GridView控件支持下面的功能: 绑定至数据源控件, 如SqlDataSource 内置排序功能 内置更新和删除功能 内置分页功能 内置行选择功能 可以编程方式访问GridView对象模型以动态设 ...
- 【转】ASP.NET常用数据绑定控件优劣总结
转自:http://www.cnblogs.com/Olive116/archive/2012/10/24/2736570.html ASP.NET常用数据绑定控件优劣总结 本文的初衷在于对Asp ...
- asp.net学习之 数据绑定控件--List数据绑定控件
原文:asp.net学习之 数据绑定控件--List数据绑定控件 List控件(如 CheckBoxList.DropDownList.ListBox 和 RadioButtonList 类)继承自L ...
- asp.net学习之 数据绑定控件--表格绑定控件
原文:asp.net学习之 数据绑定控件--表格绑定控件 数据绑定 Web 服务器控件是指可绑定到数据源控件,以实现在 Web 应用程序中轻松显示和修改数据的控件.数据绑定 Web 服务器控件 ...
- ASP.NET使用ListView数据绑定控件和DataPager实现数据分页显示(一)
为什么使用ListView+DataPager的方式实现分页显示? .net提供的诸多数据绑定控件,每一种都有它自己的优点和缺点.如果需要对数据进行操作,如果数据量不大的情况下,DataList和Gr ...
随机推荐
- canvas 背景填充
这儿介绍canvas的ccreatePattern函数, context.createPattern(Image,"repeat"),还可以repeat-x,reapter-y 还 ...
- 通过 Xftp5 管理 centOS 7 文件
一. 在安装好了centOS 7 的服务上,打开终端 运行 ip -s addr 命令 获取服务的IP地址 [root@localhost ~]# ip -s addr1: lo: <LOOPB ...
- nginx反向代理取得IP地址
nginx反向代理后,在应用中取得的ip都是反向代理服务器的ip,取得的域名也是反向代理配置的url的域名,解决该问题,需要在nginx反向代理配置中添加一些配置信息,目的将客户端的真实ip和域名传递 ...
- Python学习笔记:07异常
异常 Python用异常对象(Exception Object)来表示异常情况,当异常未被捕获时,就会产生回溯(Traceback) 异常分类 內建异常类:Exception,AttributeErr ...
- MVC中的UrlHelper
authour: chenboyi updatetime: 2015-04-27 22:32:47 friendly link: 1,CodeSimple: ps:因为UrlHelper涉及的知识 ...
- python3和Python2的区别(被坑太久了)
print函数:(Python3中print为一个函数,必须用括号括起来:Python2中print为class) Python 2 的 print 声明已经被 print() 函数取代了,这意味着我 ...
- HTML中插入视频
最常用的向HTML中插入视频的方法有两种,一种是古老的<object></object>标签,一种是html5中的<video></video>标签. ...
- WordPress网站更换老鹰主机详细操作
眼看着之前买的虚拟主机就要到期了,本着节约至上的美德,就和同事一起买了老鹰主机.因为第一次网站的配置是一个朋友帮忙的,所以现在想完全自己动手操作,毕竟之后的博客维护还是得靠自己.下面就来和我一起学习怎 ...
- hdu 5087 Revenge of LIS II
http://acm.hdu.edu.cn/showproblem.php?pid=5087 题意求第二长的上升序列. 在求最长上升序列的同时加上一个数组,来记录以i为结尾的有多少条序列.如果n+1为 ...
- 【细说Java】Java封箱拆箱的一些问题
1.概念 首先简单介绍一下概念性的东西: 所谓封箱:就是把基本类型封装成其所对应的包装类型: 而拆箱则恰好相反,是把包装类型转换成其所对应的基本数据类型. 如基本类型int,封箱后的包装类是Integ ...