手机版

ASP.NET 2.0中的操作数据6:对象数据源的编程参数值

时间:2021-11-02 来源:互联网 编辑:宝哥软件园 浏览:

介绍

正如我们在上一节的教程中所看到的,有许多替代方法可以将参数值传递给OjbectDataSource的方法。如果参数值是硬编码的,并且来自页面上的Web控件或数据源参数对象可以读取的其他源,则可以将该值绑定到输入参数,而无需编写一行代码。

但是,有时参数值来自尚未在数据源的内置参数对象中计算的源。如果我们的网站支持我们的考虑,那么我们可能希望参数基于当前登录的用户。或者,我们可以在将参数传递给ObjectDataSource的隐藏对象的方法之前进行一些定制。

每当调用ObjectDataSource的see Seelect方法时,它将首先触发其select事件,然后调用ObjectDataSource的隐藏对象的方法,然后触发ObjectDataSource的Selected事件(图1显示了这些事件的顺序)。您可以在“选择”事件的事件委托中设置或更改参数值。

//files.jb51.net/file_images/article/201604/2016042914162734.png

图1: objectdata source的Selected和Selected事件分别在调用其隐藏对象的方法之前和之后触发。

在本节中,我们将研究向DAL和BLL图层添加一个接受输入参数的方法。该参数名为Month,该方法返回EmployeesDataTable对象,该对象包含在当月指定了雇佣周年日的员工。我们的示例将代码设置为基于当前月份,并显示一个“本月员工雇佣纪念日”列表。

我们开始吧!步骤:向EmployeesTableAdapter添加一个方法。

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

//files.jb51.net/file_images/article/201604/2016042914163035.png

图2:在EmployeesTableAdapter中添加查询。

返回一个或多个行和列的SQL语句。当到达指定的SELECT语句窗口时,EmployeesTableAdapter已经加载了默认的SELECT语句。只需添加一个WHERE子句:where datepart (m,hiredate)=@ month。DATEPART是T-SQL中的一个函数,用作返回日期类型的一部分。这里,我们使用DATEPART函数返回HireDate列的月份部分。

//files.jb51.net/file_images/article/201604/2016042914163336.png

图3:只返回HireDate列的值小于或等于参数@HiredBeforeDate的行。

最后,默认方法名FillBy和GetDataBy分别改为FillByHiredDateMonth和GetEmployeesByHiredDateMonth。

//files.jb51.net/file_images/article/201604/2016042914163437.png

图4:选择一个比FillBy和GetDataBy更合适的方法名。

单击“完成”结束向导,返回数据集设计界面。此时,员工身份适应者将包括一种新的方法来获取指定月份雇用的员工。

//files.jb51.net/file_images/article/201604/2016042914163438.png

图5:新方法出现在数据集设计界面。

在第二步:中,方法getemployeesbyhireddatemonth(月)被添加到业务逻辑层。

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

[系统。组件模型。component model . DataObjectMethodType . select,false)]公共北风。EmployeesDataTable getemployeesbyhiredatemonth(int month){返回适配器。GetEmployeesByHiredDateMonth(月);}像这个类中的其他方法一样,getemployeesbyhiredatemonth(month)只是调用DAL并返回结果。

第三步,展示的是本月是入职纪念日的员工。

最后,我们举例说明如何向员工展示本月是谁的雇佣纪念日。首先,将一个GridView控件添加到页面ProgrammaticParams.aspx中,该页面位于基本文件夹中。添加一个新的ObjectDataSource控件作为其数据源。将对象数据源配置为使用类EmployeesBLL,并将SelectMethod属性指定为GetEmployeesbyhireddatemonth(月)。

//files.jb51.net/file_images/article/201604/2016042914163739.png

图6:使用EmployeesBLL类。

//files.jb51.net/file_images/article/201604/2016042914164040.png

图7:选择GetEmployeeSbyhireddateMonth(月)方法。

最后一个屏幕要求我们提供月份参数的参数来源。因为我们为编码设置了这个值,所以让参数源保持默认选项“无”,然后单击“完成”。

//files.jb51.net/file_images/article/201604/2016042914164641.png

图8:将参数源设置为无。

这将在对象数据源的选择参数集合中创建一个没有指定参数值的参数对象。

asp: ObjectDataSource ID=' objectdata source 1 ' runat=' server ' oldvaluesparametertformatstring=' original _ { 0 } ' SelectMethod=' getemployeesbyhiredatemonth ' TypeName=' EmployeesBLL ' SelectParameters asp: parameter Name=' month ' Type=' int 32 '/Select parameters/ASP : objectdata source要对该参数值进行编码和设置,我们需要向objectdata source的Select事件添加一个事件委托。为此,请在设计视图中双击ObjectDataSource。另一种方法是选择对象数据源,单击属性窗口中的黄色闪电图标,然后直接在选择列中双击,或者输入要使用的事件委托的名称。

//files.jb51.net/file_images/article/201604/2016042914164742.png

图9:单击属性窗口中的闪电图标,列出Web控件的所有事件。

这两种方法都可以在页面的代码隐藏类中将事件委托添加到ObjectDataSource的select事件中。在这个事件委托中,我们可以通过使用e . InputParameters[parameterName]读取参数的值,其中parameter name的值是asp:Parameter标记中属性名的值(InputParameters也可以通过索引访问,使用e.InputParameters[index])。要将月份参数设置为当前月份,您需要向选择事件委托添加以下代码:

受保护的void ObjectDataSource1 _ Selecting(对象发送方,objectdata source selectingeventargs e){ e . InputParameters[' month ']=DateTime。现在。月;}通过浏览器访问此页面时,我们可以看到当月(3月)只雇佣了一名员工:劳拉卡拉汉,她于1994年3月开始雇佣。

//files.jb51.net/file_images/article/201604/2016042914164743.png

图10:显示本月入职周年的员工。

摘要

虽然ObjectDataSource的参数值可以以特定的方式声明,而无需编写代码,但是以编程方式设置参数值也很容易。我们需要做的就是给ObjectDataSource的Selecting事件添加一个事件委托,在调用隐藏对象之前触发,通过InputParameters集合手动设置一个或多个参数值。

这一部分结束了基本章节。在下一节中,我们将开始主从数据一章,其中我们将重点介绍允许访问者过滤数据和主从数据处理的技术。

编程快乐!

作者简介

斯科特米切尔,六本关于ASP/ASP的书的作者。NET,是4GuysFromRolla.com的创始人,自1998年以来一直使用微软的网络技术。Scott是一名独立的技术顾问、培训师和作家,最近完成了一部即将由Sams出版社出版的新作,24小时内精通ASP.NET 2.0。他的联系电子邮件是[emailprotected],也可以通过他的博客http://ScottOnWriting.NET联系到他。

版权声明:ASP.NET 2.0中的操作数据6:对象数据源的编程参数值是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。