科技行者

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

知识库

知识库 安全导航

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

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

  • 扫一扫
    分享文章到微信

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

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

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

关键字:

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

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

编辑数据


DataGrid 控件最大的缺点之一 — 相反却是 GridView 控件最大的优点之一,是处理数据源更新的能力。当绑定数据源支持更新时,GridView 能够自动执行数据操作,从而提供真正的出盒解决方案。数据源控件通过一些布尔属性(例如 CanUpdate、CanDelete、CanSort 等)提供这些功能。

对 GridView 控件而言,数据编辑意味着就地编辑和记录删除。如前所述,就地编辑指网格支持更改当前显示记录的功能。启用 GridView 的就地编辑,需要启动 AutoGenerateEditButton 布尔属性: 

<asp:gridview runat="server" id="MyGridView" 
   datasourceid="MySource" 
   autogenerateeditbutton="true">
   &S226;&S226;&S226;
</asp:gridview>


当 AutoGenerateEditButton 属性设置为真时,GridView 显示附加的一列,如图 13 中最左边一列。单击一行的 Edit 按钮将此行置于编辑模式下。当一行处于编辑模式下时,非只读行的每个绑定字段将显示适当的输入控件,通常是一个 TextBox。当您单击更新时,GridView 引发 RowUpdating 事件并检查数据源的 CanUpdate 属性。如果 CanUpdate 返回值为假,则引发一个异常。否则,在数据源对象的 UpdateCommand 属性后创建和配置一个命令对象。

按此在新窗口打开图片
图 13 GridView 的 Edit 列


即使您对 SQL 的操作仅限于定义命令结构 — 只定义语句而让控件来完成其他操作,也无需使用 ADO.NET 或担心如何使用命令或连接。想在用户单击 Update 时保留更改,可编写以下代码: 

<asp:sqldatasource runat="server" id="MySource" 
   connectionstring="SERVER=...;DATABASE=northwind;Integrated 
   Security=SSPI;"
   updatecommand="UPDATE employees SET
           firstname=@firstname, lastname=@lastname 
           WHERE employeeid=@employeeid">
</asp:sqldatasource>
<asp:gridview runat="server" id="MyGridView" 
   DataSourceId="MySource" 
   DataKeyNames="employeeid" AutoGenerateEditButton="true">
   &S226;&S226;&S226;
</asp:gridview>


数据源的 UpdateCommand 属性被设置为 GridView 使用的 SQL 命令。您能够使用所需的任意数量的参数。如果您采用一种特殊的命名规则,参数值也能够自动解析。代表更新字段的参数(例如 firstname)必须与网格列的 DataField 属性名相匹配。用于标识工作记录的 WHERE 子句中使用的参数必须与 DataKeyNames 属性匹配,后者是显示记录的关键字段。最后,考虑这种情况:如果没有定义 UpdateCommand,却提交更改,那么 CanUpdate 返回值为假,并引发一个异常。RowUpdated 事件发出信号通知更新命令结束。通过更新命令更新的行数可在 RowUpdated 事件参数的 AffectedRows 属性中检索。

GridView 自动收集输入字段的值,填充 name/value 对词典,这个词典指示了每个行字段的新值。GridView 也公开一个 RowUpdating 事件,允许您修改正在传递到数据源对象的值。此外,在相关数据源上激发 Update 操作前,GridView 将自动调用 Page.IsValid。如果 Page.IsValid 返回值为假,将取消操作。这对使用包括验证程序在内的自定义编辑模板特别有用。

行删除操作方式与此相似。下面的 SQL 命令是一个数据源对象的 DeleteCommand 属性的合法内容: 

DELETE employees WHEREemployeeid=@employeeid请注意,如果由于特定于数据库的约束而无法删除记录,删除操作将失败。例如,如果子记录通过某种关系引用父记录,父记录将无法删除。在这种情况下,引发一个异常。 

GridView 控件不自动支持向数据源插入数据。没有这项功能完全是由于实现 GridView 不依赖于底层数据源的功能和特性。实际上,数据源对象提供一个 CanInsert 属性并支持一个 InsertCommand 属性。请注意,通过 GridView 和 DetailsView 控件的组合能够实现这个功能,一会您就会了解到。


DetailsView 控件


许多应用程序需要一次作用于一条记录。在 ASP.NET 1.x 中,没有内置的功能支持这种情况。创建单条记录视图是可能的,但需要您自己编写代码。首先,您需要获取记录,然后,将字段绑定到数据绑定表单,选择性地提供分页按钮来浏览记录。我编写了三个 Cutting Edge 列的安装程序来解决这个问题 — 2002 年 4 月、5 月和 6 月。

当生成主/详细视图时,经常需要显示单条记录的内容。通常,用户从网格中选择一条主记录,让应用程序追溯所有可用字段。通过组合 GridView 和 DetailsView,编写少量代码,就能够生成有层次结构的视图。

DetailsView 控件能够自动绑定到任何数据源控件,使用其数据操作集。控件能够自动分页、更新、插入和删除底层数据源的数据项,只要数据源支持这些操作。多数情况下,建立这些操作无需编写代码,如下所示: 

<asp:detailsview runat="server" id="det" 
   datasourceid="MySource" 
   autogenerateeditbutton="true"
   autogenerateinsertbutton="true"
   autogeneratedeletebutton="true"
   allowpaging="true"
   headertext="Employees">
   <pagersettings mode="NextPreviousFirstLast"
      firstpageimageurl="images/first.gif" 
      lastpageimageurl="images/last.gif" 
      nextpageimageurl="images/next.gif" 
      previouspageimageurl="images/prev.gif" /> 
</asp:detailsview>
 

DetailsView 控件的用户界面能够通过使用数据字段和类型进行自定义,其方式与 GridView 相似。DetailsView 不支持自定义模板,因为这项特殊的功能完全构造在新的 FormView 控件中。DetailsView 具有一个命令栏,显示 Edit、Delete 和 New 按钮的任意组合。当您单击 Edit 或 New 时,控件显示 Edit 或 Insert 模式,字段内容显示在文本框中。工作模式能通过 Mode 和 DefaultMode 属性控制。 

使用 DetailsView 控件能很好地实现无需代码的主/详细视图。除了 Edit 和 Delete 按钮,GridView 控件支持 Select 按钮,它也是预定义的。通过设置 AutoGenerateSelectButton 属性为真,您能为每一行启用此按钮。当用户单击此按钮时,当前行输入选定状态,为 GridView 的 SelectedIndex 属性分配从 0 开始的索引值。此外,GridView 控件引发 SelectedIndexChanged 事件。应用程序可以挂钩到这个事件,并执行自定义代码。

在 ASP.NET 2.0 中,如果您想生成主/详细视图,则无需处理 SelectedIndexChanged 事件。您可以将一个 GridView 控件和一个 DetailsView 控件拖放到页面上,将两者绑定到一个数据源。生成无代码的主/详细视图的技巧是,将详细视图控件绑定到当前选定记录所代表的数据源,如下所示: 

<asp:sqldatasource runat="server" id="MyDetailSource"    
   &S226;&S226;&S226;
   selectcommand="SELECT * FROM customers"
   filterexpression="customerid='@customerid'">
   <filterparameters>
     <asp:ControlParameter Name="customerid" 
        ControlId="masterGrid" 
        PropertyName="SelectedValue" />
   </filterparameters>
</asp:sqldatasource>
 

数据源对象的 FilterExpression 属性为 SelectCommand 指定的基础查询定义 WHERE 子句。参数值能够以多种方式指定,包括直接绑定一个控件属性。 对象将 @customerid 参数设置为主网格控件的 SelectedValue 属性存储的值。图 14 的代码显示如何配置主网格控件和详细视图控件。图 15 显示活动页面。请注意,无需程序代码来完成这些功能。


按此在新窗口打开图片
图 15 活动主网格



FormView 控件


FormView 是新的数据绑定控件,使用起来像是 DetailsView 的模板化版本。它每次从相关数据源中选择一条记录显示,选择性地提供分页按钮,用于在记录之间移动。与 DetailsView 控件不同的是,FormView 不使用数据控件字段,而是允许用户通过模板定义每个项目的显示。FormView 支持其数据源提供的任何基本操作。

FormView 控件是作为通常使用的更新和插入接口而设计的,它不能验证数据源架构,不支持高级编辑功能,比如外键字段下拉。然而,使用模板来提供此功能很容易。FormView 和 DetailsView 有两方面的功能差异。首先,FormView 控件具有 ItemTemplate、EditItemTemplate 和 InsertItemTemplate 属性,而 DetailsView 一个也没有。其次,FormView 缺少命令行 — 将可用功能进行分组的工具栏。与 GridView 和 DetailsView 控件不同的是,FormView 没有其自己默认的显示布局。同时,它的图形化布局完全是通过模板自定义的。因此,每个模板都包括特定记录需要的所有命令按钮。下列代码片断是在页面中嵌入一个 FormView 的典型写法。 

<asp:FormView ID="EmpDetails" runat="server" 
    DataSourceId="MySource" AllowPaging="true">
    <ItemTemplate>
      &S226;&S226;&S226;
    </ItemTemplate>
    <EditItemTemplate>
      &S226;&S226;&S226;
    </EditItemTemplate>
    <InsertItemTemplate>
      &S226;&S226;&S226;
    </InsertItemTemplate>
</asp:FormView>
 

图 16 说明一个使用 FormView 控件的页面。Edit 按钮通过命令名 Edit 的 <asp:Button> 元素来添加。这将导致 FormView 从只读模式转换到编辑模式,使用定义过的 EditItemTemplate 显示。New 命令名将强制控件转换为插入模式,显示 InsertItemTemplate 的定义内容。最后,如果您将命令名为 Delete 的按钮添加到项目模板中,用户单击它时,FormView 将调用数据源的 Delete 命令。

按此在新窗口打开图片

按此在新窗口打开图片
图 16 FormView 控件


如何检索数据来更新或插入一条记录?您可以使用一个新的数据绑定关键字 Bind,它是专门为双向绑定而设计的: 

Bind 关键字像 Eval 一样用于显示数据,而且能在更新或插入一条记录时检索输入值。此外,Bind 对 GridView 和 DetailsView 使用的 TemplateFields 非常有用。 

Bind 将绑定控件属性值存入一个值集合,FormView 控件自动检索和使用这个集合来组合插入或编辑命令的参数列表。传递到 Bind 的参数必须与数据容器的字段名匹配。例如,上一个代码片断中的文本框存放备注字段的值。最后,还要记住的是编辑和插入模板必须包含保存变更的按钮。这是指普通的按钮 — 用于保存的 Update 和 Insert 以及用于放弃操作的 Cancel。

FormView 事件的工作方式与 DetailsView 和 GridView 相同。因此,如果想处理像数据预处理或后处理(例如,填充下拉框)这样更复杂的操作,您应该为 ItemCommand、ItemInserting 和 ModeChanging 之类的事件编写适当的事件处理程序。

小结

数据绑定控件是大多数 Web 应用程序的必要组成部分。数据绑定控件应该简单但功能强大。理想的情况是,它们应该以很少的单击操作以及有限的代码数量提供高级的功能。虽然 ASP.NET 2.0 仍然在使用,但是其新一代的数据绑定控件满足了这个需求。ASP.NET 1.x 数据绑定的主要缺点是需要为普通数据操作编写过多的代码。这一点已经随着数据源对象和 GridView 控件的引入而解决了。DetailsView 和 FormView 是对 GridView 的完美补充,代表了对 ASP.NET 1.x 数据工具箱的重大改进。

原文地址:
http://www.microsoft.com/china/msdn/libr ... sp.net/0408gridview.mspx  

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1486810

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

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

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