——ASP.NET 数据绑定 第五章 软件开发中的数据绑定技术
议程 ※ ASP.NET 基本数据访问 ※数据展现 手工数据展现 绑定到 Asp.Net 的 Web 控件 绑定到 GridView 、 DetailsView 、 FormView 、 DataListView 定制分页和排序 数据选择 单选和多选
1.1 我们的数据源 ※数据库 SQL Server 2005 Express 数据库 MCS-SampleDB 中存放了 Orders 、 Orders_Products 及其参数表 可以自动生成测试数据 EXECUTE CreateRandomOrders n ※ Demo
1.2 数据源控件 数据源控件说明 ObjectDataSource 使您能够处理业务对象或其他类,并创建依赖 于中间层对象来管理数据的 Web 应用程序。 SqlDataSource 使您能够处理 ADO.NET 托管数据提供程序, 该提供程序提供对 Microsoft SQL Server 、 OLE DB 、 ODBC 或 Oracle 数据库的访问。 AccessDataSource 使您能够处理 Microsoft Access 数据库。 XmlDataSource 使您能够处理 XML 文件,该 XML 文件对诸如 或 控件等分层 ASP.NET 服务器控件极为有用。 SiteMapDataSource 与 ASP.NET 站点导航结合使用。
1.3 数据绑定控件 ※列表控件 以各种列表形式呈现数据。列表控件包括 BulletedList 、 CheckBoxList 、 DropDownList 、 ListBox 和 RadioButtonList 控件。 ※ AdRotator 将广告作为图像呈现在页上,用户可以单击该图像来转到与广告关联的 URL 。 ※ DataList 以表的形式呈现数据。每一项都使用您定义的项模板呈现。 ※ DetailsView 以表格布局一次显示一个记录,并允许您编辑、删除和插入记录。您还可 以翻阅多个记录。 ※ FormView 与 DetailsView 控件类似,但允许您为每一个记录定义一种自动格式的布 局。对于单个记录, FormView 控件与 DataList 控件类似。 ※ GridView 以表的形式显示数据,并支持在不编写代码的情况下对数据进行编辑、更 新、排序和分页。
1.4 数据绑定表达式语法 ※使用数据绑定语法,可以将控件属性值绑定到数据,并指定值以 对数据进行检索、更新、删除和插入操作。 ※数据绑定表达式包含在 分隔符之内,并使用 Eval 和 Bind 函数。 Eval 函数用于定义单向(只读)绑定。 Bind 函数用于定义双向(可更新)绑定。 ※除了通过在数据绑定表达式中调用 Eval 和 Bind 方法执行数据绑 定外,还可以调用 分隔符之内的任何公共范围代码, 以在页面处理过程中执行该代码并返回一个值。
1.5 查询和手工绑定 ※数据访问 配置连接串 编写数据访问代码 ※设计页面 设计之前检查有没有用例图和用例描述 页面整体的布局符合项目规范 Skin 、 CSS 、 MasterPage 等 页面的内容是否可编辑,内容的可见性 页面和其它页面的关系
1.5.1 手工绑定 ※简单赋值 ※根据返回集生成表格 遍历 DataView 的行和列 动态地生成 Html 表格 包括标题行和内容 通过 HtmlTable 、 HtmlTableRow 、 HtmlTableCell 也可以直接生成 Html 字符串 注意内容需要 HtmlEncode 格式化字段的值 ( 日期 ) ※ Demo
1.5.2 手工绑定 ※练习 编写一个方法,返回 50 行 ORDERS 表中的记录 将返回的 50 行记录展现为一个 Html 表格 表格中, PRIORITY 列,需要用文字 “ 高 ” 、 “ 中 ” 、 “ 低 ” 来替代原来数字 1 、 0 、 -1 表格中, “CUSTOMER_NAME” 的值需要用一个链接来表示,指向另外 一个列表页面,列出该 ORDER 的明细 (ORDERS_PRODUCTS)
1.6 绑定到 ASP.Net 的数据控件 ※绑定到 GridView 定制列标题、列的属性 Enable 分页和排序 ※练习
1.6.1GridView 控件 ※ GridView 控件用来在表中显示数据源的值。每列表示一个字段, 而每行表示一条记录。 GridView 控件支持下面的功能: 绑定至数据源控件,如 SqlDataSource 。 内置排序功能。 内置更新和删除功能。 内置分页功能。 内置行选择功能。 以编程方式访问 GridView 对象模型以动态设置属性、处理事件等。 多个键字段。 用于超链接列的多个数据字段。 可通过主题和样式进行自定义的外观。
1.6.2 列字段 列字段类型说明 BoundField 显示数据源中某个字段的值。这是 GridView 控件的默 认列类型。 ButtonField 为 GridView 控件中的每个项显示一个命令按钮。这使 您可以创建一列自定义按钮控件,如 “ 添加 ” 按钮或 “ 移除 ” 按钮。 CheckBoxField 为 GridView 控件中的每一项显示一个复选框。此列字 段类型通常用于显示具有布尔值的字段。 CommandField 显示用来执行选择、编辑或删除操作的预定义命令按钮。 HyperLinkField 将数据源中某个字段的值显示为超链接。此列字段类型 允许您将另一个字段绑定到超链接的 URL 。 ImageField 为 GridView 控件中的每一项显示一个图像。 TemplateField 根据指定的模板为 GridView 控件中的每一项显示用户 定义的内容。此列字段类型允许您创建自定义的列字段。
1.7SqlDataSource ※ SqlDataSource 控件使用 ADO.NET 类与 ADO.NET 支持的任何 数据库进行交互。 ※用于显示数据的其他控件(如 GridView 、 FormView 和 DetailsView 控件)结合使用,使用很少的代码或不使用代码就可 以在 ASP.NET 网页中显示和操作数据。 ※ SqlDataSource 控件会自动打开数据库连接,执行 SQL 语句或存 储过程,返回选定数据(如果有),然后关闭连接。 ※配置 SqlDataSource 控件时,将 ProviderName 属性设置为数据 库类型(默认为 System.Data.SqlClient )并将 ConnectionString 属性设置为连接字符串。
1.7.1 使用 SqlDataSource ※使用 SqlDataSource 控件连接至数据源 ※使用 SqlDataSource 控件发出数据命令 ※返回 DataSet 或 DataReader 对象 ※使用 SqlDataSource 控件进行缓存 ※使用 SqlDataSource 控件进行筛选 ※使用 SqlDataSource 控件进行排序
1.7.2 绑定到数据控件 ※绑定到 GridView 绑定到 SqlDataSource 数据源 设置 SelectCommand 设置查询参数 GridView 的可编辑性 ※练习
1.8FormView 控件 ※ FormView 控件用于显示表中数据源的单个记录。该控件与 DetailsView 控件相似。 ※使用 FormView 控件时,由您指定模板以显示和编辑绑定值。模 板中包含用于创建窗体的格式、控件和绑定表达式。 FormView 控 件通常与 GridView 控件一起用于主控 / 详细信息方案。 ※ FormView 控件和 DetailsView 控件之间的差别在于 DetailsView 控件使用表格布局,在该布局中,记录的每个字段都各自显示为 一行。而 FormView 控件不指定用于显示记录的预定义布局。 ※ FormView 控件通常用于更新和插入新记录,并且通常在主 / 详细 方案中使用,在这些方案中,主控件的选中记录决定要在 FormView 控件中显示的记录。 ※ FormView 控件可以自动对它的关联数据源中的数据进行分页,一 次一个记录,但前提是数据由实现 ICollection 接口的对象表示或 基础数据源支持分页。
1.8.1PagerTemplate CommandArgument 值说明 “Next” 导航至下一页。 “Prev” 导航至上一页。 “First” 导航至第一页。 “Last” 导航至最后一页。 整数值导航至指定页码。
1.8.2FormView 事件 ※ PageIndexChanging 在单击某个页导航按钮时发生,但在 FormView 控件执行分页操作之前。此事 件通常用于取消分页操作。 ※ PageIndexChanged 在单击某个页导航按钮时发生,但在 FormView 控件执行分页操作之后。此事件 通常用于在用户定位到控件中不同的记录之后需要执行某项任务时。 ※ ItemCommand 在单击 FormView 控件中的某个按钮时发生。此事件通常用于在单击控件中的某个按 钮时执行某项任务。 ※ ItemCreated 在 FormView 控件中创建完所有 FormViewRow 对象之后发生。此事件通常用于在显示 行之前修改行中将要显示的值。 ※ ItemDeleting 在单击 Delete 按钮(其 CommandName 属性设置为 “Delete” 的按钮)时发生,但在 FormView 控件从数据源删除记录之前。此事件通常用于取消删除操作。 ※ ItemDeleted 在单击 Delete 按钮时发生,但在 FormView 控件从数据源删除记录之后。此事件通常用 于检查删除操作的结果。 ※ ItemInserting 在单击 Insert 按钮(其 CommandName 属性设置为 “Insert” 的按钮)时发生,但在 FormView 控件插入记录之前。此事件通常用于取消插入操作。 ※ ItemInserted 在单击 Insert 按钮时发生,但在 FormView 控件插入记录之后。此事件通常用于检查插 入操作的结果。 ※ ItemUpdating 在单击 Update 按钮(其 CommandName 属性设置为 “Update” 的按钮)时发生,但在 FormView 控件更新记录之前。此事件通常用于取消更新操作。 ※ ItemUpdated 在单击 Update 按钮时发生,但在 FormView 控件更新行之后。此事件通常用于检查更 新操作的结果。 ※ ModeChanging 在 FormView 控件更改模式(更改为编辑、插入或只读模式)之前发生。此事件通常 用于取消模式更改。 ※ ModeChanged 在 FormView 控件更改模式(更改为编辑、插入或只读模式)之后发生。此事件通常 用于在 FormView 控件更改模式时执行某项任务。 ※ DataBound 此事件继承自 BaseDataBoundControl 控件,在 FormView 控件完成对数据源的绑定后 发生。
1.9XmlDataSource 控件 ※ XmlDataSource 控件显示分层 XML 数据,但可以使用该控件同 时显示分层数据和表格数据。 ※ XmlDataSource 从使用 DataFile 属性指定的 XML 文件加载 XML 数据。另外,还可以从使用 Data 属性的字符串加载 XML 数据。 ※ XmlDataSource 控件将 XML 元素的属性公开为可绑定数据的字 段。如果要绑定非属性的值,则可以使用可扩展样式表语言 (XSL) 样式表指定转换。
1.10 性能和安全考虑 ※性能 避免在列表展现过程中,循环执行 SQL 查询 Demo , DataList 和 DetailsView 大数据量对分页和排序的影响 不要试图返回过大的数据行 慎用 SELECT * FROM … 警惕排序对性能的影响 ※安全 杜绝 SQL 注入式攻击 输出结果时,注意 Html 编码
性能和安全考虑 ※练习 利用 SQL Server 2005 ,一次仅返回一页数据 手工控制 GridView 的翻页和排序 WITH OrderedOrders AS ( SELECT ORDERS.*, SELECT ORDERS.*, ROW_NUMBER() OVER(ORDER BY SORT_ID) AS ROW_NUMBER FROM ORDERS FROM ORDERS) SELECT ROW_NUMBER, * FROM OrderedOrders WHERE ROW_NUMBER >= 1 AND ROW_NUMBER = 1 AND ROW_NUMBER <= 20;
1.11 数据选择 ※单选 在 GridView 中增加选择列 获取当前选择行的键值 通常单选操作用于编辑或查看明细 一旦选择,操作就应该执行 ※多选 在 GridView 中添加复选框 添加客户端脚本,汇总客户端的选择的内容 在 GridView 翻页或排序对选择项的影响 多选操作通常用于批量操作
数据选择 ※练习 在 GridView 上分别实现单选和多选记录行,将选中的记录行进行删 除
小结 & 问题讨论 孔子说: “ 学而不思则罔,思而不学则殆。 ”