Scott Mitchell 的ASP.NET 2.0数据教程之六::

系统 2141 0

ASP.NET 2.0 中操作数据 :: 编程设置 ObjectDataSource 的参数值

下载本教程中的编码例子 | 下载本教程的PDF版

导言

正如我们在上一节的教程中所看到的,有很多可供选择的方式把参数的值传递到 OjbectDataSource 的方法里。假如参数值是采用硬编码方式,来源于页面上的一个 Web 控件,又或者其他可被数据源 Parameter 对象读取的源,那么这个值可以绑定到输入参数而不需要写一行的代码。

然而有些时候,参数值来自某些在数据源的内置 Parameter 对象里还没有计算出来的源。假如我们的站点支持我们的考虑那么我们也许希望参数基于当前登录用户。又或者我们在参数传送到 ObjectDataSource 的隐含对象的方法前做一些客户化定制。

无论什么时候调用 ObjectDataSource Seelect 方法,它都会首先触发它的 Selecting 事件,然后才调用 ObjectDataSource 的隐含对象的方法,完成后则激发 ObjectDataSource ObjectDataSource Selected 事件(图一说明这些事件的顺序)。可以在 Selecting 事件的 事件委托中对参数的值进行设置或更改。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
1: ObjectDataSource Selected Selecting 事件分别在调用它的隐含对象的方法之前和之后触发

这一节里我们将看看添加一个接受一个输入参数方法到 DAL BLL 层,参数名为 Month int 类型,方法返回一个 EmployeesDataTable 对象,里边包含的是雇佣周年纪念都指定月份的雇员。我们的例子将编码设置为基于当前月份,显示一个“本月雇用周年纪念员工”列表。

让我们开始吧!

第一步 : 添加一个方法到 EmployeesTableAdapter

在我们的第一个例子里,我们需要添加一个方法来获取那些雇用日期( HireDate )在某个指定月份的员工。在我们的程序架构下为了提供这个功能,我们首先需要在通过特定 SQL 语句映射出来的 EmployeesTableAdapter 中创建一个方法。为了实现这一点,首先打开 Northwind 类型化数据集,在 EmployeesTableAdapter 标签上右键选择“添加查询”。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
2: EmployeesTableAdapter 里添加一个查询

选择返回一个或多个行和列的 SQL 语句。当到达指定 SELECT 语句窗口时, EmployeesTableAdapter 已经装载了默认的 SELECT 语句。简单地,添加一个 WHERE 子句: WHERE DATEPART(m, HireDate) = @Month 。其中 DATEPART T-SQL 里的一个函数,用作返回日期类型的一部分;在这里,我们使用 DATEPART 函数返回雇用日期( HireDate )列的月份部分。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
3: 仅返回 HireDate 列的值小于等于参数 @HiredBeforeDate 的行

最后,分别把默认的方法名 FillBy GetDataBy 更改为 FillByHiredDateMonth GetEmployeesByHiredDateMonth

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
4: 选择比 FillBy GetDataBy 更恰当的方法名称

点击“完成”结束向导并返回到数据集的设计界面。这时候 EmployeesTableAdapter 会包含一套新的方法来获取指定月份雇用的员工。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
5: 新的方法出现在数据集的设计界面

第二步 : 在业务逻辑层添加方法 GetEmployeesByHiredDateMonth( month )

因为我们的程序架构使用了单独的一层来处理业务逻辑和数据逻辑,我们需要在 BLL 里增加一个方法,该方法调用 DAL 的方法获取指定月份里雇用的员工。打开文件 EmployeesBLL.cs 并添加下面这个方法:

[System.ComponentModel.DataObjectMethodAttribute(System.ComponentModel.DataObjectMethodType.Select, false)]

public Northwind.EmployeesDataTable GetEmployeesByHiredDateMonth(int month)

{

return Adapter.GetEmployeesByHiredDateMonth(month);

}

和此类里的其他方法一样, GetEmployeesByHiredDateMonth( month ) 仅仅是简单地调用 DAL 并返回结果。

第三步 : 显示雇用周年纪念日在本月份的员工

最后一部我们举例说明如何显示雇用周年纪念在本月份的员工。首先,添加一个 GridView 控件到页面 ProgrammaticParams.aspx ,该页面在文件夹 BasicReporting 里。添加一个新的 ObjectDataSource 控件作为它的数据源。配置 ObjectDataSource 使用类 EmployeesBLL 并指定 SelectMethod 属性为 GetEmployeesByHiredDateMonth( month )

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
6: 使用 EmployeesBLL
Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
7: 选择 GetEmployeesByHiredDateMonth( month ) 方法

最后一屏要求我们给 month 参数提供参数源。既然我们将编码设置这个值,就让参数源维持它的默认选项 None ,点击“完成”。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
8: 让参数源设置为 None

这将在 ObjectDataSource SelectParameters 集合里创建一个未指定参数值的 Parameter 对象。

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" OldValuesParameterFormatString="original_{0}"

SelectMethod="GetEmployeesByHiredDateMonth" TypeName="EmployeesBLL">

<SelectParameters>

<asp:Parameter Name="month" Type="Int32" />

</SelectParameters>

</asp:ObjectDataSource>

要编码设置这个参数值,我们需要给 ObjectDataSource Selecting 事件添加一个事件委托。为了实现这一点,到设计视图里在 ObjectDataSource 上双击。另一种方式是选中 ObjectDataSource 在属性窗口里点击黄色闪电小图标,然后,直接在 Selecting 这一栏里双击或者输入一个你要使用的事件委托的名称。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
9: 点击属性窗口里的闪电图标列出 Web 控件的所有事件

两种途径都可以在页面的 代码隐藏类 里增加一个对 ObjectDataSourc e Selecting 事件的事件委托。在这个事件委托里,我们可以通过使用 e.InputParameters[ parameterName ] 读取参数的值,其中 parameterName 的值是 <asp:Parameter> 标签里的属性 Name 的值( InputParameters 也可以按照索引访问,用 e.InputParameters[ index ] )。为了把 month 参数设置为当前月份,需要在 Selecting 事件委托里加入如下代码:

protected void ObjectDataSource1_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)

{

e.InputParameters["month"] = DateTime.Now.Month;

}

当通过浏览器访问该页面,我们可以看到只有一个员工是在当前月份(三月)雇用的: Laura Callahan ,他从 1994 3 月开始雇用。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值
10: 雇用周年纪念日在本月份的员工被显示出来了

总结

虽然可以用特定的方式声明 ObjectDataSource 的参数值而不需要写代码,编程设置参数值同样很容易。我们需要做的仅仅是给 ObjectDataSource Selecting 事件增加一个事件委托,它在调用隐含对象的方式前触发,并且通过 InputParameters 集合 手工设置一个或多个参数值。

本节结束 基本 这一章。下一节我们开始 主从数据 一章,这一章里我们将着眼于允许访问者筛选数据和主从数据处理的技巧。

祝编程快乐!

作者简介

Scott Mitchell ,著有六本 ASP/ASP.NET 方面的书,是 4GuysFromRolla.com 的创始人,自 1998 年以来一直应用微软 Web 技术。 Scott 是个独立的技 术咨询顾问,培训师,作家,最近完成了将由 Sams 出版社出版的新作, 24 小时内精通 ASP.NET 2.0 。他的联系电邮为 mitchell@4guysfromrolla.com ,也可以通过他的博客 http://ScottOnWriting.NET 与他联系。

Scott Mitchell 的ASP.NET 2.0数据教程之六:: 编程设置ObjectDataSource的参数值


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论