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 ...
随机推荐
- python 列表 字典 读写文件:pickle模块的基本使用
python数据持久存储:pickle模块的基本使用(转载) 作者: pzxbc 出处: http://pzxbc.cnblogs.com/ 本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保 ...
- Xcode 快捷键-b
0.跳到指定行command + L; 1.配置高亮方案:Fonts & Colors 2.键盘快捷键:Key Bindings 3.代码缩进:Re-indent selection.(快捷键 ...
- Struts2 DMI的使用
Struts2的Action类中可以放置多个方法并在struts.xml中配置供页面调用.只要方法符合execute()方法的标准即返回类型是String就可以了. 同一个Action多个方法调用的方 ...
- NTOPNG,用来平时优化网站性能,用处大的
最近考察一下NTOPNG和NGX-REQ模块,看哪个对网站优化性能用户更大... 参考URL: http://www.68idc.cn/help/jiabenmake/qita/20150109164 ...
- 创建组合索引SQL从1个多小时到1S的案例
select aa.acct_org, aa.loan_acct_no, aa.FUNCTIONARY, aa.cust_no, sum(dwm.pkg_tools.currcdtran(bb.INT ...
- 【HDOJ】1717 小数化分数2
简单字符串处理. #include <cstdio> #include <cstring> #include <cmath> #include <ctype. ...
- 服务器端javascript——Rhino和Node
Node: Node是v8 javasript解析器的一个特别版本,侧重于异步I/O,网络和HTTP 入门见:http://www.cnblogs.com/wishyouhappy/p/3647037 ...
- [Java I/O] TextFile 工具类
一种常见的编程任务是,从一个文件读取内容,修改内容,再把内容写到另一个文件里. Java 要实现读取.写入操作,需要创建多个类才能产生一个 Stream 进行操作. 下面是一个简单的工具类,封装对文件 ...
- C#日历上显示节气、阴阳历节假日信息
近期在做一个工作日历,想在日历上设置工作日,显示请假.加班等相关信息,显示农历日期信息(包括农历日期.节日 .节气).公历信息(节假期). 不能不说,http://www.cnblogs.com/ho ...
- GitHub for Mac
GitHub for Mac 安装 1.从 mac.github.com 下载最新版本的 GitHub. 2.当你开启软件时,你可以选择用你的 GitHub 账户登录,或者新建一个账户. 3.在左侧, ...