科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道[冷枫]ASP.Net2.0 数据绑定控件的优越性在哪里?

[冷枫]ASP.Net2.0 数据绑定控件的优越性在哪里?

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

ASP.Net2.0 数据绑定控件的优越性在哪里?整理并转贴一篇MSDN的的文章,供大家参考.

作者:冷枫 来源:CSDN 2007年9月22日

关键字:

  • 评论
  • 分享微博
  • 分享邮件

在本页阅读全文(共3页)

GridView 对象模型


GridView 与 DataGrid 的整体结果看起来相似。一些通用元素经过了重命名,一些通用功能现在需要不同的语法。总之,如果熟悉 DataGrid 控件,则可立即自如地运用 GridView。图 6 详尽列出了组成 GridView 的新元素(请注意,其中一些元素,如 DetailLinkStyle,仅用于在移动设备上显示网格)。行元素通过 Rows 集合中的 GridViewRow 类生成的实例进行显示。GridViewRow 类映射到 DataGridItem 类,而 Rows 明确替代了 DataGrid 的项目集合。行类型由 DataControlRowType 枚举表示,用来指示位置和角色(例如,页脚、页眉、页导航和数据行)。GridView 还引入一个新概念 — 行元素状态。该行状态由 DataControlRowState 标记的枚举值表示 — 通常值是 Edit,可选值为 Insert 和 Selected。有趣的是,这两类枚举恰巧由所有数据视图控件(GridView、DetailsView 和 FormView)共享。

除了引入符合自适应显示的元素之外,GridView 仅有一个其他类型的新元素 — 空数据行。当 GridView 绑定到一个空数据源时,会选择性地显示一些默认内容,为用户提供反馈。在这种情况下显示的内容依赖于新的空数据行元素的内容。可通过一个属性 (EmptyDataText) 或一个模板 (EmptyDataTemplate) 设置该行的内容。

GridView 控件的属性主要分为三种类型:行为、可视设置和状态。图 7 列出 GridView 的一些属性。请查看包括 EnableSortingAndPagingCallbacks、EmptyDataText 和 UseAccessibleHeader 在内的新属性以及被重命名或改编的属性,后者实现了 DataGrid 已经支持的功能。

编程模型与按钮列略有不同。在 ASP.NET 1.x 的 DataGrid 中,您不得不通过添加特定的列类型来创建一个 Edit 按钮 — EditCommandColumn。如果要创建一个 Delete 或 Select 按钮列,则必须添加通用的按钮列并预定义一个命令名。GridView 对象则更一致、更简洁。它基于三个新的布尔属性:AutoGenerateEditButton、AutoGenerateDeleteButton 和 AutoGenerateSelectButton。当其中任何一个属性设置为真时,网格中分别添加一个 Edit、Delete 或 Select 命令按钮列。例如,当 AutoGenerateEditButton 属性设置为真时,在网格中自动为每个数据行添加带有 Edit 按钮的一列。也可以手动添加这些按钮,方法是在列集合中添加一个 CommandField 对象。Columns 属性列出了列对象,这些对象很像 DataGrid 的 Columns 属性列出的对象。根据客户的反馈,其中也添加了几个帮助器属性。特别是,您现在能够为每个显示行存储多个键值。实际上,DataGrid 的 DataKeyField 字符串属性已经扩展为一个字段名数组。新的属性命名为 DataKey,用于存储由字段名组成的一个字符串数组,这个字符串数组唯一标识一个数据行。DataKey 是特定行的值的相应数组。它返回 DataKey 对象的集合。每个 DataKey 对象包含一个键名值,DataKey 的 DataKey 对象数量与 GridView 的显示行数相同。

SortDirection 和 SortExpression 跟踪当前的网格排序。这些属性用于在内部实现自动翻转排序,标记网格当前排序次序。每个对象的 PagerSettings 组包含配置用户界面、行为和页导航位置的所有属性。现在,页导航支持的导航模式不但包括首行和尾行,还包括下一行和上一行。

GridView 控件也能够使用一个基于回调的轻量型机制来进行排序和分页。您可以通过设置 EnableSortingAndPagingCallbacks 布尔属性来开启和关闭此功能。当单击排序或分页链接来启用回调时,GridView 请求排序数据或下一页,不回发可视页面。(这里发生了一个往返过程,但是无页面刷新,因此您不知道。)请注意,这个功能有个警告:启用 GridView 中的选项时,新页面保留当前选定的索引。如果有与之相关联的详细信息页面,那么选定的内容将失去同步。处理类似 PageIndexChanging 这样的事件也不管用,因为如果不启用回调,则不能引发这些事件。最后,切记回调驱动的分页和排序机制需要使用 Microsoft Internet Explorer 5.0 及更高版本。


GridView 事件


GridView 控件使用的方法与我们熟知的 DataBind 方法不同。在 ASP.NET 2.0 中,许多控件以及 Page 类本身使用的是 Pre-load/Post-load 事件对。控件生命周期中的关键操作被包装在一对事件中,一个在操作发生前触发,另一个在操作完成后立即触发。GridView 类也是这样。图 8 显示的是新事件列表。使用事件来通告操作极大地增强了编程能力。例如,通过挂钩 RowUpdating 事件,您能够检查新值的更新内容。您可能想在客户端提供的值存留到下层数据存储之前,通过 HTML 编码来处理 RowUpdating 事件。这种简单的技巧有助于避免恶意的脚本注入。

使用 pre/post 事件对使您能够取消一个基于运行时条件而进行的事件。请看以下代码片段: 

void PageIndexChanging(object sender, GridViewPageEventArgs e)
{
  // Is this the sensitive page? (> 4)
  bool isSensitivePage = (e.NewPageIndex > 4);
  if (isSensitivePage && (User.Identity.Name != "username"))
     e.Cancel = true;
  return;    
}

取消是一个读/写布尔属性,存在于所有从 CancelEventArgs 派生的事件参数类中。GridView 的许多事件参数类继承了 CancelEventArgs,这意味着所有这些事件都能被取消。Cancel 属性值在激发“pre”事件时通常设置为假。处理事件时,您能够检查一些条件,通过将 Cancel 属性设置为真选择取消事件。例如,刚才的代码片段在当前用户未被授权查看索引大于 4 的页面时,取消了转换到新页面的操作。 


显示、排序和分页


一个网格通常用于显示数据库查询的结果。使用 GridView 控件显示结果比以往更简单。您只需建立一个数据源对象,提供连接字符串和查询文本,为 GridView 的 DataSourceId 属性分配数据源 ID。运行时,GridView 自动绑定到数据源,生成正确的数据列。在默认情况下,查询的所有列均显示在网格中。

像 DataGrid 控件一样,GridView 也支持在 Columns 集合中自定义列字段。如果只想显示检索到的数据字段的一个子集,或只想自定义其显示外观,则可使用代表显示数据列的对象来填充 Columns 集合。GridView 支持多种列类型,包括新的复选框和图像列类型: 

<columns>
  <asp:boundfield datafield="productname" headertext="Product" /> 
  <asp:checkboxfield datafield="discontinued" 
     headertext="Discontinued" /> 
  <asp:buttonfield buttontype="Button" text="Buy" /> 
  <asp:hyperlinkfield text="More Info..." 
     datanavigateurlfields="productid,discontinued"
     datanavigateurlformatstring="more.aspx?id={0}&disc={1}" /> 
</columns>
 

图 9 显示的活动网格配置为使用代码中列出的字段。GridView 列类名与 DataGrid 接口中的相应类名略有不同。后缀“column”基本被替换成后缀“field”。除了名字的更改,与列类匹配的行为几乎相同。一些新的列类型使您不必经常使用模板。例如,CheckBoxField 列通过一个复选框显示特定的数据字段,而改进的 HyperLinkField 列提供了期待已久的功能 — 支持多个 URL 参数。正如刚才的代码片段所示,DataNavigateUrlFields 属性接收了一个以逗号分隔的字段名列表,并将其合并到 DataNavigateUrlFormatString 属性的文本中。 

按此在新窗口打开图片
图 9 带有活动字段的 GridView


请注意 ButtonField 与 CommandField 之间的差异。两列都向网格的用户界面添加了一个按钮,但是 CommandField 用于显示命令按钮来执行选择、编辑、插入或删除操作。ButtonField 只是代表作为按钮显示的字段。最后,GridView 能够通过 ImageField 列类型嵌入图像。 

<asp:imagefield datafield="photo" headertext="Picture" />

图 10 显示活动的 ImageField 列,它位于 Northwind 雇员表的照片字段。有趣的是,ImageField 通过 ASP.NET 2.0 DynamicImage 控件显示来自数据库和 URL 两者的图像。而且,在编辑模式下,ImageField 列弹出一个 Browse 按钮,用于定位要上载的位于本机的新文件。 


按此在新窗口打开图片
图 10 图像字段列


Template 列也受支持,所需的语法与 ASP.NET 1.x 的 DataGrid 使用的相似: 

<asp:templatefield headertext="Product">
   <itemtemplate>
     <b><%# Eval("productname")%></b> <br />
     available in <%# Eval("quantityperunit")%>
  </itemtemplate>
</asp:templatefield>
 

有趣的是,ASP.NET 2.0 允许的数据绑定表达式的语法更简洁。在 ASP.NET 1.x 中生成模板化的内容需要使用下列表达式: DataBinder.Eval(Container.DataItem, "fieldname")由于使用了一个更小的数据绑定机制,现在,您能够避免使用 DataBinder 类中静态的 Eval 方法,而是调用 Page 类定义的新的 Eval 保护方法。您将计算的字段名和方法传递给 Eval,决定当前的数据项并通过 DataBinder.Eval 准备一个常规调用。 

Eval 被声明为 TemplateControl 类的一个保护方法,Page 和 UserControl 都从这个类派生。真正代表一个 .aspx 活动页面的类是从 Page 派生的一个类的实例;因此,它能够调入受保护的方法。ASCX 用户控件也是如此。

如果焦点是显示纯数据,则不需要像 GridView 这样全新的网格控件。当然,现在您只需少量代码或不需要编码就能将数据源控件绑定到 GridView,但是单凭这点就有必要替换 DataGrid 吗?如果答案是否定的,请考虑排序和分页。

在 GridView 控件中,只需通过开启 AllowPaging 和 AllowSorting 属性就能启用自动翻转排序和分页功能。如果在 ASP.NET 1.x 中尝试过这项操作,您就可大概了解这项功能了。

按此在新窗口打开图片
图 11 活动的可分页、可排序网格


图 11 显示一个可分页、可排序的网格。图 12 显示此网格的完整代码。(值得注意的是,仅当需要标记列标头来指示排序方向时才需要使用 C# 代码。)因此,无需编写代码,排序和分页就能十分正常地运行。通过 DataSourceMode 属性控制 SQLDataSource 的数据检索模型。可行的值类型是 DataSet(默认值)和 DataReader。当 DataSourceMode 为 DataSet 时,数据源控件可能会一直选择性地缓存 SELECT 命令的结果。这使得 GridView 适应于丰富多样的使用情境,其中控件可提供无代码排序、筛选和分页功能。默认情况下禁用缓存,因此它必须在数据源控件上启用。

在内存中缓存数据能大大提高性能,但是数据会显得有些脆弱。您必须权衡利弊,因为如果系统内存运行效率低,Cache 对象会自动丢弃最少使用的数据。此外,在 ASP.NET 2.0 中,SQLDataSource 控件可能选择性地建立与数据库的自动依赖关系,以便立即检测到数据变更。这确保了总是显示最新的数据。有关数据源控件功能的更多信息,请参见我在前面提到的 2004 年 6 月发表的文章。当 SQLDataSource 控件检索模型为 DataReader 时,检索数据使用 IDataReader 对象,它是一个只进、只读、流水游标。
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章