|
加入收藏
|
设为首页
|
证书查询
|
首页
|
中心简介
学院简介
中心简介
教学环境
教学模式
课程优势
清华风采
社会形象
大事记
清华声明
|
形象展示
视频下载
|
专业介绍
预科课程
软件工程师
网络工程师
短期课程
职业素养训练
学术专家在线
|
在线学习
net培训
java培训
sql数据库培训
|
证书展示
清华大学证书
工信部证书
学历证书
|
讲师风范
网络专业讲师
软件专业讲师
教务老师
职业规划师
就业指导教师
|
就业指导
网络招聘会
签约流程
战略合作企业
就业心得
就业成果
就业保障体系
面试试题
就业兵法
|
学员社区
学习心得
拓展活动
学生会成员
软件下载
|
班主任群
班主任通知
班主任工作
班主任介绍
班主任心得
|
报名咨询
咨询问题解答
我要报名
清华贴吧
|
就业联盟
免费体验
当前位置:
首页
>>
在线学习
>>
net培训
ASP.NET 2.0数据访问和绑定
繁简对译:[
繁
简
] 字体设置:[
大
中
小
]
2008-09-27 阅读 次
第三章
ASP.NET 2.0
数据访问和绑定
课程目标
q
ADO.NET
复习
q
数据绑定表达式
q
常用数据源控件
SqlDataSource
、
ObjectDataSource
、
AccessDataSource
等。
q
数据控件
GridView
、
DetailsView
、
FormView
、
ReportView
、
DataList
、
Repeater
控件、报表控件。
q
模板数据绑定
体验项目
——
<
在线投票系统
>
q
实现了一个简单的投票系统,投票的信息都保存在数据库中,数据库保存投票的项目和项目被投的次数。
q
本系统实现原理是用户每投一票,将在数据库中为所投项目的次数属性加
1
,最终次数属性值就是此项目的支持数。
ADO.NET
简介
q
从
ODBC
到
ADO
数据库的通用接口
q
ADO.NET
的数据模型
从
ODBC
到
ADO
数据库的通用接口
q
ODBC
通用接口
q
ADO
通用接口
从
ODBC
到
ADO
数据库的通用接口
q
当前市场上存在着数十种不同类型的数据库,常用的有
Access
、
SQL Server
、
Oracle
、
MySQL
、
DB2
等。这些数据库分别由不同的公司开发,技术都比较成熟。由于这些数据库采用的数据格式和接口各不相同,因此当应用程序访问它们时,就需要分别编写不同的接口,这种需要给应用程序的设计带来了麻烦。如何来解决这个矛盾呢?解决的方法就是由系统提供各种不同数据库的驱动程序,然后放在应用程序与数据库之间作为中间环节。
q
微软公司提供的通用接口,多年来已经经历了几次大的改进:
ODBC
→
OLEDB
→
ADO
→
ADO.NET
。
ODBC
通用接口
q
ODBC
是
Open Database Connectivity
的缩写,意为
“
开放数据库互连
”
。这是一种用
C
语言开发的由多种函数组成的应用程序接口
(Application Program Interface
,
API)
。这些接口将数据库底层的操作隐藏在
ODBC
的驱动程序之中。应用程序只需要用统一的接口指向
ODBC
,然后再由
ODBC
调用系统提供的驱动程序就能驱动不同类型的数据库。有了这个统一的接口,网站
(
或
Windows
应用程序
)
的设计者只需用相同
(
或相似
)
的语句即可调用不同类型的数据库了。
q
尽管通过
ODBC
已经能够驱动大多数常用的数据库,但因为这种编程接口还过于复杂,而且还没有进行优化。所以后来微软又在
ODBC
的基础上专门针对
Access
库
(*.mdb)
创建了优化编程接口
DAO(Data Access Object
,数据访问对象
)
;针对
SQL Server
数据库,创建了优化编程接口
RDO(Remote Data Object
,远程数据对象
)
,这种接口还能应用于
Oracle
数据库。
ODBC
通用接口
ADO
通用接口
q
ADO(Active Data Object
,动态数据对象
)
是微软进军
Internet
后的产品,它是建立在
OLE DB
技术基础上的接口技术。
OLE DB
在
ODBC
的基础上,用面向对象的思想对
ODBC
的函数重新进行了分类和包装,形成了一种新的标准。可以说
ODBC
是
OLE DB
的子类,而
OLE DB
是
ODBC
的基类。利用
OLE DB
不仅能访问关系型数据库,还能访问非关系型数据
(
如文件等
)
。
q
ADO
又对
OLE DB
的接口进行了优化。
ADO
是
ODBC
和
OLE DB
的上层接口技术。它比
RDO
、
DAO
等接口具有更高的性能、更小的容量及更简便的操作。
q
使用
ADO
接口几乎能够访问全部常用的数据库,如
Access
、
SQL Server
、
Oracle
、
MySQL
等,还能访问非关系型文件。
ADO
通用接口
ADO.NET
的数据模型
q
数据访问的层次结构
q
数据集与数据提供器
ADO.NET
的数据模型
q
ASP.NET
使用
ADO.NET
数据模型。该模型从
ADO
发展而来,但它不只是对
ADO
的改进,而是采用了一种全新的技术。主要表现在以下几个方面:
Ø
ADO.NET
不是采用
ActiveX
技术,而是与
.NET
框架紧密结合的产物。
Ø
ADO.NET
包含对
XML
标准的完全支持,这对于跨平台交换数据具有十分重要的意义。
Ø
ADO.NET
既能在与数据源连接的环境下工作,又能在断开与数据源连接的条件下工作。特别是后者,非常适合于网络应用的需要。因为在网络环境下,保持与数据源连接,不符合网站的要求,不仅效率低,付出的代价高,而且常常会引发由于多个用户同时访问时带来的冲突。因此
ADO.NET
系统集中主要精力用于解决在断开与数据源连接的条件下数据处理的问题。
数据访问的层次结构
数据访问的层次结构
q
ADO.NET
访问数据采用层次结构,其逻辑关系如上图所示。
q
图的顶层代表
Web
应用层,底层代表各种不同类型的数据源,包括不同类型的数据库、
XML
文档等。中间是数据层
(Data Layer)
,下面是数据提供器
(Provider)
。在这个层次结构中,数据提供器起到了关键的作用。
q
Provider
相当于
ADO.NET
的通用接口。各种不同的数据提供器对应于不同类型的数据源。每个数据提供器
(Provider)
相当于一个容器,包括一组类以及相关的命令,它是数据源与数据集
(DataSet)
之间的桥梁。它可以根据需要将相关的数据读入内存中的数据集,也可以将数据集中的数据返回到数据源。
数据集与数据提供器
数据集与数据提供器
q
在
ADO.NET
中数据集与数据提供器是两个非常重要而又相互关联的核心组件。数据集
(DataSet)
与数据提供器
(Provider)
的关系如上图所示。
q
图的左边代表数据集
(DataSet)
,右边代表数据提供器
(Provider)
。
q
数据集是实现
ADO.NET
断开式连接的核心,从数据源读取的数据先缓存到数据集中,然后被程序或控件调用。数据源可以是数据库或者
XML
数据。
q
数据提供器用于建立数据源与数据集之间的联系,它能连接各种类型的数据,并能按要求将数据源中的数据提供给数据集,或者从数据集向数据源返回编辑后的数据。
数据集
(DataSet)3
-
1
q
数据集相当于内存中暂存的数据库,不仅可以包括多张数据表,还可以包括数据表之间的关系和约束。允许将不同类型的数据表复制到同一个数据集中
(
其中某些数据表的数据类型可能需要做一些调整
)
,甚至还允许将数据表与
XML
文档组合到一起协同操作。
q
数据集从数据源中获取数据以后就断开了与数据源之间的连接。允许在数据集中定义数据约束和表关系,增添、删除和编辑记录,还可以对数据集中的数据进行查询、统计等。当完成了各项数据操作以后,还可以将数据集中的数据送回数据源。
q
数据集的这些特点为满足多层分布式应用的需要跨进了一大步。因为编辑和检索数据都是一些比较繁重的工作,需要跟踪列模式,存储关系数据模型等。如果在连接数据源的条件下完成这些工作,不仅会使总体性能下降,还会影响到可扩展性的问题。
数据集
3
-
2
q
创建数据集对象的语句是:
DataSet ds = new DataSet ();
或者
DataSet ds = new DataSet ("
表名
");
q
在数据集中包括以下几种子类:
(1)
数据表
(DataTable)
数据表用来存储数据。一个数据集可以包含多张表,每张表又可包含多个行和列。数据表的创建有两种方式:第一,当将数据加载到数据集
(DataSet)
时,会自动创建一些表
(DataTable)
;第二,以编程方式创建
DataTable
的对象,然后将这个对象添加到
DataSet
的
Tables
集合中。
提取数据集中的数据表的语句是:
DataTable dt = ds.
数据表名
;
其中,
dt
代表数据表对象;
ds
代表数据集对象。
(2)
数据行
(DataRow)
数据行是给定数据表中的一行数据,或者说是数据表中的一条记录。它可能代表一个学生、一位用户、一张订单或者一件货物的相关数据。
DataRow
对象的方法提供了对表中数据的插入、删除、更新和查看等功能。提取数据表中的行的语句如下:
DataRow dr = dt.Rows[n];
其中:
DataRow
代表数据行类;
dr
是数据行对象;
dt
代表数据表对象
; n
代表行的序号
(
序号从
0
开始
)
。
数据集
3
-
3
(3)
数据列
(DataColumn)
数据表中的数据列
(
又称字段
)
定义了表的数据结构,例如,可以用它确定列中的数据类型和大小,还可以对其他属性进行设置。例如,确定列中的数据是否是只读的、是否是主键、是否允许空值等;还可以让列在一个初始值的基础上自动增殖,增值的步长还可以自行定义。
某列的值需要在数据行的基础上进行。语句如下:
string dc = dr.Columns["
字段名
"].ToString();
或者
string dc = dr.Column[index].ToString();
综合前面的语句,若想取出数据表
(dt)
中第
3
条记录中的
“
姓名
”
字段,并将该字段的值放入一输入框
(textBox1)
中时,语句可以写成:
DataTable dt = ds.Customers
//
从数据集中提取数据表
DataRow dRow = dt.Rows[2 ];
//
从数据表提取行
string textBox1.Text=dRow["CompanyName"].ToString();
//
从行中取出字段的值
(4)
关系
(DataRelation)
表之间的关系由相关的列定义。在关系型数据库中,关系是指两个表之间外键约束的组合。为了将一张表与另一张表联系起来,可以简单地创建一个
DataRelation
,它将指出一张表中的哪一列与另一张表中的哪一列相联系。
数据提供器
(Provider)
q
Provider
作为数据集与数据源之间的桥梁,主要任务是建立两者之间的联系。
Provider
相当于一个容器,包括
4
种核心类,其类名及其作用如下。
Ø
Connection(
连接
)
类:用于建立与数据源的连接。
Ø
Command(
命令
)
类:用于设置适合于数据源的操作命令,以便执行检索、编辑或输出参数等数据操作。
Ø
DataAdapter(
数据适配器
)
类:每张表对应一个数据适配器,用来向数据集中填入数据,或者从数据集中读出数据。
Ø
DataReader(
数据读取
)
类:用于从数据源向应用程序读取只向前的、只读的、无缓冲的字符流。
Connection
类
q
Connection
类提供了对数据源连接的封装。类中包含连接方法,以及描述当前连接状态的属性。在
Connection
类中最重要的属性是
ConnectionString
。该属性用来指定服务器名称、数据源信息以及其他登录信息。以数据库的连接对象为例,类名为
SqlConnection
,其创建的语句是:
SqlConnection sqlConnection1 = new SqlConnection();
设置
ConnectionString
属性的语句是:
sqlConnection1.ConnectionString
=
"workstation id=\"CHJ-IQDTYJ8FHYC\";
//
服务器名
user id=cheng;password=cheng;
//
安全信息
initial catalog=Northwind;persist security info=False";
//
数据库名以其他参数
Command
类
q
Command
类是对数据源操作命令的封装。对于数据库来说,这些命令既可以是内联的
SQL
语句,也可以是数据库的存储过程。
q
由
Command
类生成的对象只能在连接的基础上,对连接的数据源指定相应的操作。用来定义操作的语句。例如:
SqlCommand command1 =
new SqlCommand("SELECT * FROM Employees",
sqlConnection1);
语句将生成一命令对象
command1
,
对由
sqlConnection1
连接的数据源指定检索
(SELECT)
操作。
DataAdapter
类
q
数据适配器
(DataAdapter)
利用连接对象
(Connection)
连接的数据源,使用命令对象
(Command)
规定的操作从数据源中检索出数据送往数据集,或者将数据集中经过编辑后的数据送回数据源。
q
数据适配器将数据填入数据集时调用方法
Fill()
,语句如下:
dataAdapter1.Fill (dataSet10.Products);
或者
dataAdapter1.Fill (dataSet11, "Products");
当
dataAdapter1
调用
Fill()
方法时将使用与之相关联的命令组件所指定的
SELECT
语句从数据源中检索行。然后将行中的数据添加到
DataSet
中的
DataTable
对象中,如果
DataTable
对象不存在,则自动创建该对象。
当执行上述
SELECT
语句时,与数据库的连接必须有效,但不需要用语句将连接对象打开。如果调用
Fill()
方法之前与数据库的连接已经关闭,则将自动打开它以检索数据,执行完毕后再自动将其关闭。如果调用
Fill()
方法之前连接对象已经打开,则检索后继续保持打开状态。
q
一个数据集中可以放置多张数据表。但是每个数据适配器只能够对应于一张数据表。
DataReader
类
q
使用
DataReader
类可以实现对特定数据源中的数据进行高速、只读、只向前的数据访问。
q
与数据集
(dataSet)
不同,
DataReader
是一个依赖于连接的对象。就是说,它只能在与数据源保持连接的状态下工作。因此执行的过程往往是:
(1)
首先打开与数据源的连接;
(2)
调用
DataReader
类的
Read()
方法;
(3)
然后关闭与数据源的连接。
ASP.NET
数据访问概述
q
ASP.NET 2.0
支持一种用于数据绑定的声明性解决方案,对于大多数常见的数据方案,它根本不需要代码:
l
选择和显示数据。
l
对数据进行排序、分页和缓存。
l
更新、插入和删除数据。
l
使用运行时参数筛选数据。
l
使用参数创建主
/
详细信息方案。
q
ASP. NET 2.0
引入了两种类型的参与声明性数据绑定模型的两类服务器控件:数据源控件和数据绑定控件。
数据源控件
数据绑定控件
数据绑定表达式
q
使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以对数据进行检索、更新、删除和插入操作。
q
数据绑定表达式包含在
<%#
和
%>
分隔符之内,可以配合使用
Eval
、
Bind
和
XPath
函数。
q
Eval
函数用于定义单向(只读)绑定。
q
Bind
函数用于定义双向(可更新)绑定。
q
除了通过在数据绑定表达式中调用
Eval
和
Bind
方法执行数据绑定外,还可以调用
<%#
和
%>
分隔符之内的任何公共范围代码,以在页面处理过程中执行该代码并返回一个值。
数据绑定示例
在页面添加一个
DataList
控件:
<asp:DataList ID="DataList1" runat="server">
<ItemTemplate>
集合中数值为:
<%# Container.DataItem %>
</ItemTemplate>
</asp:DataList>
……
protected void Page_Load(object sender, EventArgs e)
{
ArrayList lists = new ArrayList();
lists.Add("
清华大学
");
lists.Add("
清华
IT
学习认证中心
");
lists.Add("
微软中国
");
DataList1.DataSource = lists;
DataList1.DataBind();
}
数据控件绑定数据库
q
创建数据显示表
q
数据排序和分页
q
更新和删除数据
q
筛选数据
q
缓存数据
q
主
/
详细信息显示方式
q
插入数据
创建数据显示表
q
最简单的数据驱动页类型是只读报表,它显示数据但不允许用户操作表示形式或修改数据。
q
数据源
SqlDataSource
控件
q
数据控件
GridView
例:通过向导创建数据显示表
创建数据显示表示例
9
-
1
(
1
)
新建
Web
窗体
,
命名为
SqlDataSource1Demo.aspx
。
(
2
)
在设计视图中
,
从工具箱中的
“
数据
”
选项卡中拖出一个
SqlDataSource
控件放入页面或者双击
SqlDataSource
控件也可。
(
3
)点击智能标记按钮,打开任务窗口,如图所示。
创建数据显示表示例
9
-
2
(
4
)点击
“
配置数据源
…”
,出现配置数据源窗口,在此窗口中的
“
选择您的数据连接
”
中可以选择一个现有的数据连接,或者单击
“
新建连接
”
按钮,会弹出如左图所示的
“
选择数据源
”
对话框窗口,如果曾经创建过数据连接,也可能会直接弹出
“
添加连接
”
对话框,如右图所示。
创建数据显示表示例
9
-
3
(
5
)在上左图中,根据所需连接数据库的需要,选择连接数据源,不同的数据源,
ADO.NET
连接所需提供的数据驱动程序是不一样的。这里选择
“
Microsoft SQL Server
”
。点击
“
确定
”
后,弹出上图所示的
“
添加连接
”
对话框。
(
6
)在上右图中的服务器名中输入:
.\SQLEXPRESS
,注意
“
\
”
旁有个小点,表示本机,就会连接本地上
SQLServer2005 Express
数据库了。在选择一个数据库项中,下拉选择所需连接的数据库名称,这里选择
pubs
。点击确定后完成
“
新建连接
”
。
(
7
)点击
“
下一步
”
,进入
“
将连接字符串保存到应用程序配置文件中
”
对话框,如图所示。
创建数据显示表示例
9
-
4
(
8
)
Visual Studio2005
自动生成一个数据库连接字符串
,
上图就是提示是否保存在应用程序的配置文件中。选中是保存,单击
“
下一步
”
。进入
“
配置
Select
语句
”
,如左图所示。
(
9
)选择要显示的表和字段,这里选择表
“
authors
”
以及全部字段,单击
“
下一步
”
,进入
“
测试查询
”
对话框。
创建数据显示表示例
9
-
5
(
10
)测试查询没有问题后,点击
“
完成
”
按钮。完成对
SqlDataSource
控件的数据源配置。实际上会在文件中生成以下代码:
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$
ConnectionStrings:pubsConnectionString%>"
SelectCommand="SELECT * FROM [authors]">
</asp:SqlDataSource>
Ø
同时在应用程序配置文件
Web.Config
中,会自动写好连接字符串。
<?xml version="1.0"?>
<configuration>
<appSettings/>
<connectionStrings>
<add name="pubsConnectionString"
connectionString="Data Source=.\SQLEXPRESS;
Initial Catalog=pubs;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
创建数据显示表示例
9
-
6
(
11
)
从工具箱的
“
数据
”
选项面板中
,
拖入
GridView
控件进入页面
,
如左图所示。
(
12
)点击智能标记按钮,在
“
选择数据源
”
选项中,下拉选择
“
SqlDataSource1
”
。则数据表就马上发生了变化,如右图所示。
创建数据显示表示例
9
-
7
(
13
)绑定数据源之后,页面会自动生成以下代码:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False"
DataKeyNames="au_id" DataSourceID="SqlDataSource1">
<Columns>
<asp:BoundField DataField="au_id" HeaderText="au_id"
ReadOnly="True" SortExpression="au_id" />
<asp:BoundField DataField="au_lname" HeaderText="au_lname"
SortExpression="au_lname" />
<asp:BoundField DataField="au_fname" HeaderText="au_fname"
SortExpression="au_fname" />
<asp:BoundField DataField="phone" HeaderText="phone"
SortExpression="phone" />
<asp:BoundField DataField="address" HeaderText="address"
SortExpression="address" />
<asp:BoundField DataField="city" HeaderText="city
“
SortExpression="city" />
<asp:BoundField DataField="state" HeaderText="state"
SortExpression="state" />
<asp:BoundField DataField="zip" HeaderText="zip"
SortExpression="zip" />
<asp:CheckBoxField DataField="contract" HeaderText="contract"
SortExpression="contract" />
</Columns>
</asp:GridView>
创建数据显示表示例
9
-
8
(
14
)
点击运行或者在浏览器中查看本页面
,
运行结果如图所示。
创建数据显示表示例
9
-
9
(
15
)
以上就是通过
SqlDataSource
数据源控件以页面声明的方式绑定到任何支持
SqlDataSource
的数据绑定控件。
例如
:
DropDownList
、
ListBox
、
RadioButtonList
、
BulletedList
、
DetailsView
等控件。
GridView
的
Columns
集合可添加对象
GridView
的
Columns
集合可添加对象包括:
Ø
BoundField
Ø
CheckBoxField
Ø
ImageField
Ø
HyperLinkField
Ø
CommandField
Ø
ButtonField
Ø
TemplateField
。
下面示例添加一列
HyperLinkField
(
1
)上例中,点击
GridView
控件的显示智能标记,点击
“
编辑列
”
,进入编辑字段对话框,如左图所示。
(
2
)在左图中,选择
BoundField
下的
au_lname
、
au_fname
、
phone
、
address
、
city
、
state
、
zip
,选择
CheckBoxField
下的
contract
添加进来,还选择一个
HyperLinkField
添加进选定字段中。
(
3
)然后选中添加的
HyperLinkField
,设置
DataTextField
为
“
au_id
”
,
HeadText
为
“
编号
”
,
DataNavigateUrlFields
为
“
au_id,au_fname
”
,具体设置可点击此项属性后的按钮,设置对话框参见右图所示,设置
DataNavigateUrlFormatString
为
“
~/DataBind/AuthorDetail.aspx?uid={0}&fname={1}
”
,
Target
设置为
“
_blank
”
。将各选定字段的
HeadText
设置为对应的中文标题,
(
4
)设置完成后,在浏览器中预览此页面,运行结果如图所示。
(
5
)在设计视图中,可以右击选择
“
自动套用格式
”
,设置合适的
GridView
外观的样式。
(
6
)在上图中,第一列就是一个超链接列,可以链接到另一页,显示详细信息,如图所示。
详细信息显示
(
1
)创建
AuthorDetail.aspx
页,首先拖入一个
SqlDataSource
控件,
“
配置数据源
”
过程和前面的过程一样,不过数据连接可以选择已经创建完成的
“
pubsConnectionString
”
,下一步到
“
配置
Select
语句
”
。
(
2
)在
“
配置
Select
语句
”
对话框中,需要设置
Where
条件,点击
“
Where(
W
)
…”
按钮,弹出
“
添加
Where
子句
”
对话框,如图所示。
(
3
)按上图所示,设置好后,点击
“
添加
”
,然后确定,则
“
Select
语句
”
数值为
“
SELECT * FROM [authors] WHERE ([au_id] = @au_id)
”
。在查询测试中,可以输入一个合理的数值,然后测试运行一下。
(
4
)从工具箱中的
“
数据
”
选项中,拖入一个
DetailsView
控件,设置其数据源为刚才创建的
SqlDataSource
控件。通过智能标记菜单中的
“
编辑字段
”
,将字段列表的标题换成对应的中文标题,具体操作方法和
GridView
编辑字段一样。可以通过
“
自动套用格式
”
设置一种显示风格。
(
5
)运行后,显示的结果如上例所示。
绑定数据源模式说明
q
如果通过
SqlDataSource
控件只是读取数据,而不需要排序、编辑等操作,可以让
SqlDataSource
控件的数据源模式(
DataSourceMode
)为
DataReader
。
q
通过将
SqlDataSourceMode
属性设置为
“
DataReader
”
,可以配置
SqlDataSource
控件将数据作为
DataReader
返回。
q
当只需对数据进行仅向前、只读访问时,使用
DataReader
一般比使用
DataSet
具有更好的性能。
q
但是要注意
SqlDataSource
的排序功能在此模式下将被禁用。
数据排序和分页
q
GridView
控件相对于其他数据绑定控件的关键优点之一是其自动利用数据源功能的能力。
q
对数据进行手动排序和分页,
GridView
控件能够自动执行这些操作
q
需要将数据源配置为支持这些操作,当
SqlDataSource
控件的
DataSourceMode
属性设置为
“
DataSet
”
时支持排序。
启用排序
q
若要在
GridView
中启用排序
UI
,选中智能标记菜单中的
“
启用排序
”
,或者在
HTML
代码将
AllowSorting
属性设置为
true
。
q
设置列字段与
GridView
控件的
SortExpression
属性关联,也即
SortExpression
被设置为与
GridView
的某列关联的单个字段名称。
启用分页
2
-
1
q
GridView
控件还通过选中智能标记中的
“
启用分页
”
,或者在
HTML
代码中将
AllowPaging
属性设置为
true
。
q
GridView
能够对从数据源返回的任何支持
ICollection
接口的值自动进行分页
。
启用分页
2
-
2
q
在设置分页后,还可以通过属性窗口
Ø
设置
GridView
控件的
PageSize
(每页显示大小)
Ø
可以设置
PagerStyle
中的
HorizontalAlign
为
Center
来使页码标签显示在脚注的中间
Ø
通过分别配置
PagerStyle
和
PagerSettings
属性,还可以自定义页导航的样式和设置。
Ø
PagerStyle
确定页导航的外观和风格,而
PagerSettings
确定要使用的分页类型(数字或
“
Next/Previous
”
(下一页
/
上一页)按钮)、页导航位置和相关选项。
更新和删除数据
q
通过
Update
和
Delete
操作,
GridView
控件还能够自动呈现用于修改数据的
UI
,只要关联的数据源被配置为支持这些功能。
q
SqlDataSource
控件在其
UpdateCommand
和
DeleteCommand
属性分别设置为有效的更新或删除命令或存储过程时分别支持
Update
操作和
Delete
操作。
q
UpdateCommand
或
DeleteCommand
应该包含用于
GridView
控件将传递的每个值的参数占位符。还可以指定一个
UpdateParameters
或
DeleteParameters
集合以设置每个参数的属性,例如参数数据类型、输入
/
输出方向或默认值。
更新和删除数据
q
GridView
控件和
SqlDataSource
数据源控件配合实现更新和删除功能,具体参见以下设置过程:
(
1
)选中
SqlDataSource
控件,首先设置
UpdateQuery
属性,弹出
“
命令及参数编辑器
”
对话框,如图所示
。
(
2
)可以点击
“
查询生成器
”
来生成查询语句,弹出添加表对话框,如左图所示。
(
3
)添加数据表
“
authors
”
,在列编辑需要更新的数值字段,请注意
Update
语句中的参数的命名约定。参数的命名预期应与
SelectCommand
返回的关联字段值相同。
UPDATE authors SET au_lname = @au_lname, au_fname = @au_fname, phone = @phone, address = @address, city = @city, state = @state, zip = @zip,contract = @contract
WHERE (au_id = @au_id)
注意
@
参数名需要和
SqlDataSource
控件的
Select
语句返回的字段名相同。
(
4
)
编辑完
SelectQuery
属性后
,
然后再编辑
DeleteQuery
属性
,
语句为
:
DELETE FROM authors WHERE (au_id = @au_id)
(
5
)点击
GridView
控件智能标记菜单中的
“
添加列
”
,弹出添加字段对话框,在对话框中将选择字段类型设置为:
CommandField
,命令按钮选中
“
删除
”
和
“
编辑和更新
”
,如右图所示。
(
6
)点击
“
确定
”
后,则
GridView
会自动多出两列
“
编辑
”
和
“
删除
”
列。选中编辑列,点击智能标记中的
“
左移列
”
,将
“
编辑
”
列移动到第一列。如图所示。
(
7
)因为考虑到
pubs
数据库中
authors
表和库中其他表存在的主外键约束,可能有些数据无法删除,所以先向
authors
插入两条纪录。
(
8
)运行本页或者在浏览器中查看本页,选择最后一页,点击某行
“
编辑
”
按钮,进入
GridView
编辑状态。
(
9
)在修改文本框的数值,点击
“
更新
”
按钮可以更新数据库数值,当然如果无需修改可以
“
取消
”
。
(
10
)在数据列表状态也可以删除数据,选择刚才插入的一条数值,点击
“
删除
”
按钮,就可以把本条数据删除。
运行结果参见示例
DataKeyNames
属性
q
在
Update
和
Delete
操作中扮演特殊角色的一个重要属性是
DataKeyNames
属性。
q
此属性通常被设置为数据源中字段的名称,这些字段是用于匹配该数据源中的给定行的主键的一部分。
q
当以声明方式指定此属性时,多个键之间用逗号分隔,虽然通常只有一个主键字段。
q
为了保留原始值以传递给
Update
或
Delete
操作,
DataKeyNames
属性指定的字段的值在视图状态中往返,即使该字段并未作为
GridView
控件中的列之一被呈现。
q
当
GridView
调用数据源
Update
或
Delete
操作时,它在一个特殊的
Keys
字典中将这些字段的值传递给数据源,该字典独立于包含用户在行处于编辑模式时(对于更新操作)输入的新值的
Values
字典。
筛选数据
q
数据驱动页中的一种常见方案是筛选报表中数据的能力。
SqlDataSource
数据参数来源
2
-
1
q
SqlDataSource
控件的数据参数,可以有多个来源,配置数据参数以便从以下任意来源检索值。
SqlDataSource
数据参数来源
2
-
2
缓存数据
q
数据源控件的具备一个功能是自动缓存数据的能力。
q
尽管可以使用缓存
API
以编程方式缓存数据,但是设置数据源控件的一些声明性属性可以达到相同的结果。若要对
SqlDataSource
控件(以及将讨论的
ObjectDataSource
)启用缓存,请将
EnableCaching
属性设置为
true
。
q
设置
CacheDuratio
属性指定要在缓存中存储项的时间长度(以秒为单位)。
q
可以将
CacheExpirationPolicy
属性设置为
Sliding
或
Absolute
。
q
当
DataSourceMode
属性设置为
“
DataSet
”
时,缓存仅在
SqlDataSource
控件上受支持。
缓存数据示例
主
/
详细信息显示方式(
DetailsView
控件)
q
主
/
详细信息通常是指这样一种控件安排,其中一个控件(
“
主
”
控件)中的选定记录在另一个控件(
“
详细信息
”
控件)中显示选定记录的附加详细信息。
编辑记录的
DetailsView
(
1
)可以使用
AutoGenerateEditButton
或
CommandField.ShowEditButton
属性启用该编辑
UI
。
(
2
)在上例基础上,设置绑定到
DetailsView1
数据源控件
SqldataSource3
的
UpdateQuery
为:
UPDATE authors
SET au_lname = @au_lname, au_fname = @au_fname, phone = @phone,
address = @address, city = @city, state = @state, zip = @zip, contract = @contract
WHERE au_id=@au_id
(
3
)
通过
DetailsView1
的智能标记中的
“
添加新字段
”
添加
CommandField
类型的
“
编辑
/
更新
”
。
不同的页中使用主
/
详细信息方案
插入数据
SqlDataSource
的局限
q
前面课程演示和讲解了将控件绑定到
SqlDataSource
,
SqlDataSource
支持用于指定连接字符串、
SQL
语句或存储过程的属性,用以查询或修改数据库。
q
以上方式适合大多数小规模的个人或业余站点,但对于较大规模的企业级应用程序,在应用程序的呈现页中直接存储
SQL
语句可能很快就会变得无法维护。
ObjectDataSource
控件
2
-
1
q
对于较大规模的企业级应用程序,不能在应用程序的呈现页中直接存储
SQL
语句。这些应用程序通常需要用中间层、数据访问层或业务组件构成封装性更好的数据模型。
q
因此在
ASP.NET2.0
数据源控件模型使用的
ObjectDataSource
控件支持这种方式。
ObjectDataSource
控件
2
-
2
q
ObjectDataSource
公开一个
TypeName
属性
(
而不是
ConnectionString
属性
),
该属性指定要实例化来执行数据操作的对象类型
(
类名
)
。
q
类似于
SqlDataSource
的命令属性
,
ObjectDataSource
控件支持诸如
SelectMethod
、
UpdateMethod
、
InsertMethod
和
DeleteMethod
的属性
,
用于指定要调用来执行这些数据操作的关联类型的方法。
绑定到数据访问层
q
典型的数据访问层组件可按如下方式公开:
public class CustomDataLayer {
public DataView GetRecords();
public DataView GetRecordsByName(String categoryName);
public DataView GetRecordByID(int recordID);
public int UpdateRecord(int recordID, String recordData);
public int DeleteRecord(int recordID);
public int InsertRecord(int recordID, String recordData);
}
q
ObjectDataSource
可以通过属性或者代码按照如下方式关联到该类型:
<asp:ObjectDataSource TypeName="CustomDataLayer"
SelectMethod="GetRecords"
UpdateMethod="UpdateRecord"
DeleteMethod="DeleteRecord" InsertMethod="InsertRecord"
runat="server"/>
ObjectDataSource
示例
2
-
1
//
中间层部分代码
using System;
using System.Data;
using System.Collections.Generic;
namespace TsinghuaIt
{
public class Author
{
public String ID { ...
}
public String Name { ...
}
public String LastName { ...
}
public
String
State
{ ... }
public Author(String id, String name, String lastName, String state){ ... }
public Author(){ ...}
}
public class AuthorsBlock
{
public AuthorsBlock(){ ... }
public List<Author> GetAuthorsByState(String state, String sortExpression)
{ ... }
public int UpdateAuthor(string ID, string LastName, string Name, string State)
{ ... }
public int UpdateAuthor(Author a) { ... }
public List<String> GetStates(){ ... }
}
public class AuthorComparer : IComparer<Author>
{ ... }
}
ObjectDataSource
示例
2
-
2
相关设置
:
(
1
)
ObjectDataSource2
绑定
DropDownList1
控件
,
设置
ObjectDataSource2
的
TypeName
为
“
TsinghuaIt.AuthorsData
”
,
SelectMethod
为
“
GetStates
”
(
AuthorData
类中方法
)
。
(
2
)
设置
DropDownList1
的
DataSourceID
为
“
ObjectDataSource2
”
,
DataTextField
和
DataValueField
都为
“
state
”
。
(
3
)
ObjectDataSource1
绑定
GridView1
控件
,
设置
ObjectDataSource1
的
TypeName
为
“
TsinghuaIt.AuthorsData
”
,
SelectMethod
为
“
GetAuthorsByState
”
,
因为有参数
,
需设置
SelectParameters
,
参数名称为
“
state
”
,
对应值为
“
DropDownList1.SelectValue
”
,
默认值为
“
CA
”
。因为涉及到更新数据,所以还要设置
UpdateMethod
为
“
UpdateAuthor
”
,
UpdateParameters
中添加四个参数名为
“
au_id
,
au_fname
,
au_lname
,
state
”
,对应数值部分为空。
(
4
)设置
GridView1
控件的
DataSourceID
为
“
bjectDataSource1
”
,
DataKeyNames
为
“
au_id
”
。
数据绑定表达式
q
ASP.NET2.0
改进了模板中的数据绑定,
DataBinder.Eval(Container.DataItem, fieldname)
简化为
Eval(fieldname)
。
q
Eval
方法也接受一个可选的
formatString
参数。
q
Eval
仅在数据绑定控件的模板中使用,而不能在
“
页
”
级别使用。
q
ASP.NET2.0
页继续支持
DataBinder.Eval
,因此它可用于简化的
Eval
语法不受支持的场合。
例如:
<asp:DataList DataSourceID="ObjectDataSource1" runat="server">
<ItemTemplate>
<asp:Image ImageUrl='<%# Eval("FileName",
"images/thumbs/{0}") %>' runat="server"/>
<asp:Label Text='<%# Eval("Caption") %>' runat="server"/>
</ItemTemplate>
</asp:DataList>
DataList
控件
q
DataList Web
服务器控件以某种格式显示数据,这种格式可以使用模板和样式进行定义。
q
DataList
控件可用于任何重复结构中的数据。如表,
DataList
控件可以以不同的布局显示行,如按列或行对数据进行排序。
DataList
模板示例
q
运行结果
q
设计视图
DataList
控件支持的模板类型
DataList
事件
q
响应列表项中的按钮单击而引发。这些事件旨在帮助开发人员响应
DataList
控件的最常用功能。支持该类型的四个事件:
l
EditCommand
l
DeleteCommand
l
UpdateCommand
l
CancelCommand
q
若要引发这些事件
,
可将
Button
、
LinkButton
或
ImageButton
控件添加到
DataList
控件中的模板中
,
并将这些按钮的
CommandName
属性设置为某个关键字
,
如
edit
、
delete
、
update
或
cancel
。当用户单击项中的某个按钮时,就会向该按钮的容器(
DataList
控件)发送事件。按钮具体引发哪个事件将取决于所单击按钮的
CommandName
属性的值。例如,如果某个按钮的
CommandName
属性设置为
edit
,则单击该按钮时将引发
EditCommand
事件。如果
CommandName
属性设置为
delete
,则单击该按钮将引发
DeleteCommand
事件,依此类推。
FormView
控件
q
FormView
控件在任意形式的模板中一次呈现单个数据项。
q
FormView
控件使用数据源中的单个记录,该控件与
DetailsView
控件相似。
q
DetailsView
和
FormView
之间的主要差异在于
DetailsView
具有内置的表格呈现方式,而
FormView
需要用户定义的模板用于呈现。
FormView
和
DetailsView
对象模型在其他方面非常类似。
FormView
控件示例
q
运行结果
q
设计视图
Repeater
服务器控件
q
Repeater
服务器控件类似于
DataList
服务器控件,通过创建模板为
Repeater
服务器控件提供布局。
q
如果未定义模板,或者如果模板都不包含元素,则该控件不会显示在页面上。
q
Repeater
服务器控件能够支持的模板有
ItemTemplate
、
AlternatingItemTemplate
、
HeaderTemplate
、
FooterTemplate
、
SeparatorTemplate
。
q
该控件模板编辑参见
DataList
。
其他数据源控件
q
AccessDataSource
控件
•
使用
Access
数据库作为数据源
•
和
SqlDataSource
数据源控件一样使用
SQL
语句执行数据的查询、更新、修改等操作
•
使用
DataFile
属性直接指定
Access
数据库的位置
q
XmlDataSource
控件
•
XmlDataSource
数据源控件是为数据绑定控件提供
XML
类型的数据源。
•
数据绑定控件可以使用该控件显示分层数据和表格数据。
•
从
DataFile
属性指定的
XML
文件中加载
XML
数据
q
SiteMapDataSource
控件
•
提供分层的数据源,或者叫作站点地图数据的数据源,常用来为
ASP.NET
导航控件(如
TreeView
和
Menu
控件)提供数据源。
•
。
SiteMapDataSource
使那些并非专门作为站点导航控件的
Web
服务器控件(如
TreeView
、
Menu
和
DropDownList
控件)能够绑定到分层的站点地图数据。
ReportViewer
服务器控件
q
ReportViewer
控件是具有报表设计功能和用于显示报表。
q
用来呈现表格格式的数据、聚合数据和多维数据,它可以以图表形式显示数据。
q
支持的图表有柱形图、条形图、折线图、饼图、散点图、气泡图、面积图、圆环图和股价图。
q
报表还可以导出
Excel
文件和
PDF
文件。
ReportViewer
服务器控件示例
本章总结
q
ADO.NET
简介
q
数据绑定表达式
q
常用数据源控件
SqlDataSource
、
ObjectDataSource
、
AccessDataSource
等。
q
数据控件
GridView
、
DetailsView
、
FormView
、
ReportView
、
DataList
、
Repeater
控件、报表控件。
q
模板数据绑定
上一篇:验证控件
下一篇:ASP.NET2.0服务器控件
相关文章
万网将组建百人审核组 缩短.cn域名开通时间
大学生求职难 能力与需求不匹配是主要原因
吉大辅导相关通知
微软:MSN仍将存在 IM/Email服务将整合
SQL离前端有多远?
专家教你如何彻底清除熊猫烧香
赛门铁克:免费杀软只是噱头难以善终
Vista入门级版将采用79种语言和视频帮助功能
打印
收藏
关闭