手机版

ASP.NET 2.0中的操作数据5:声明参数

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

介绍

在上一章的教程中,我们看到GridView、DetailsView和FormView绑定到OjbectDataSource控件来显示数据,ObjectDataSource调用类ProductsBLL的GetProducts()方法。方法GetProducts()返回一个强类型的数据表,该数据表由Northwind数据库的Products表中的所有记录组成。类ProductsBLL还包含返回部分数据的其他方法:getProductByProductid(product id)、getProductBycategoryid(categoryid)和getProductBySupplierid(supplier id)。这三种方法需要一个输入参数来指示如何过滤返回的产品信息数据。

ObjectDataSource可以调用需要传入参数的方法,但是为了实现这一点,我们需要指定这些参数的取值位置。这些参数的值可以通过硬代码传入,也可以从某种来源动态获取,包括:查询字符串、会话变量、页面上控件的属性值等。

在本章的教程中,让我们开始说明如何使用参数来设置硬编码值。特别是,我们将重点向页面添加一个DetailsView,以显示名为厨师安东的秋葵混合的特殊产品,其产品标识为5。接下来,我们将研究如何基于Web控件设置参数的值。特别是,我们将使用一个文本框让用户输入国家,然后单击一个按钮列出该国家的供应商。

使用硬编码的参数值。

第一个示例是将DetailsView控件添加到“基本分类”文件夹中的“声明参数”页面。从DetailsView控件的智能标记下拉列表中选择“新建数据源.”,然后选择“添加对象数据源”。

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

图1:向页面添加一个对象数据源。

这将自动打开ObjectDataSource控件的配置数据源导航。在文件夹上方的导航中选择产品类别。

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

图2:选择类别产品。

因为我们想要显示特定产品的信息,所以我们应该使用getproductbyproductid(product id)方法。

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

图3:选择GetProductByProductID(ProductID)方法。

因为我们选择了带参数的方法,所以有一个额外的导航屏幕,在其中我们需要定义参数使用的值。左边的列表显示了我们指定的方法的所有参数。GetProductByProductID(productID)方法只有一个参数:product id。在右侧的参数源下拉列表中,列出几种可以用作参数源的参数值类型。因为我们想指定硬编码值5作为productID参数,所以让参数源选项为无,并在默认值输入框中键入5。

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

图4:参数productID使用硬编码值。

完成配置数据源的向导后,ObjectDataSource控件的声明标记包含一个SelectParameters集合,在每个SelectMethod属性中指定的方法的参数对应一个Parameter对象。由于我们示例中的方法只需要一个参数parameterID,所以SelectParameters集合中只有一个元素。选择参数集合可以包含系统中的任何类。命名空间。因为它是硬编码的参数值,所以使用基本参数类;如有必要,还可以创建自定义参数类型。

asp3360 object data source ID=' objectdata source 1 ' runat=' server ' SelectMethod=' GetProductByProductID ' type name=' product bll ' SelectParameters ASP : par A血糖仪默认值=' 5 ' name=' product ID ' type=' int 32 '/select parameters/asp3360 object data source注意:如果按照这些步骤在计算机上声明标记,您可能会看到有InsertMethod、UpdateMethod和DeleteMethod的参数值,例如DeleteParameters。对象数据源的选择数据源向导自动指定插入、更新和删除这些产品的方法。因此,除非您明确清除它们,否则它们将包含在上述标记中。

当访问此页面时,数据Web服务器控件将调用ObjectDataSource的Select方法,该方法将调用类ProductsBLL的GetProductByProductID(ProductID),并使用硬编码值“5”作为输入参数ProductID。该方法将返回一个强类型的ProductDataTable对象,该对象包含一个数据行的信息——厨师安东的gumbomix(ProductID为5的产品)。

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

图5:显示了关于厨师安东的秋葵汤组合的信息。

将网站控件的属性设置为参数源。

OjbectDataSource控件的参数值也可以设置为基于页面上的Web控件的值。为了说明这一点,让我们举一个使用GridView显示位于用户指定国家的供应商的例子。首先,在页面上添加一个文本框控件,让用户输入国家名称。此文本框控件的标识属性设置为国家名称。向页面添加另一个按钮控件。

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

图6:向页面添加一个名为“国家名称”的文本框控件。

接下来,向页面添加一个GridView,并从智能标记中选择添加一个新的ObjectDataSource。因为我们想要显示供应商信息,所以从向导的第一个屏幕中选择供应商列表类。从第二个屏幕中,选择GetSuppliersByCountry(国家)方法。

然后,向页面添加一个GridView控件,并选择从其智能标记中添加一个新的ObjectDataSource。因为我们想要显示供应商信息,所以我们选择了配置数据源向导文件夹上方的类别供应商。在第二个屏幕上,选择GetSuppliersByCountry(国家/地区)方法。

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

图7:选择获取供应商国家(国家)方法。

GetSuppliersByCountry(国家)方法有一个输入参数,因此向导会再次显示最后一个屏幕,允许您选择参数的值。这一次,将参数源设置为Control,将出现一个ControlID下拉列表,其中包含页面上所有控件的名称。从中选择CountryName控件。由于首次访问此页面时,文本框“国家名称”将为空,因此不会从中返回任何值,也不会显示任何数据。如果要默认显示一些结果,请在默认值文本框中输入默认参数值。

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

图8:将CountryName控件的值设置为参数值。

ObjectDataSource的声明标签与我们的第一个示例略有不同。使用控制参数代替标准参数对象。控件参数有一些额外的属性来指定网站控件的标识,还有一个属性名作为参数。配置数据源向导足以帮助我们决定,例如,文本框,我们可能会使用它的文本属性作为参数值。但是,如果需要使用Web控件的不同属性值,则需要在此处更改PropertyName属性,或者从“配置数据源向导”中单击“高级属性”。

asp3360 object data source ID=' objectdata source 2 ' runat=' server ' select method=' getsuppliersbycondition ' type name=' suppliersball ' select parameters ASP : co control parameter controlid=' CountryName ' name=' country ' property name=' text ' type=' string '/select parameters/ASP 3360 object data source首次访问此页面时,文本框country name中的内容为空。GridView控件仍将调用ObjectDataSource的Select方法,但空值将被传递到GetSuppliersByCountry(国家)方法中。适配器(TableAdapter)会将此空值转换为空值(DBNull。值),但是GetSuppliersByCountry(country)方法使用的查询已经声明,当传入空值错位参数@CategoryID时,不会返回任何结果。简而言之,没有供应商会被退回。

一旦您访问了正在输入的国家/地区,然后单击“显示供应商”按钮触发回发,就会请求对象数据源的选择方法,并将文本框的文本值作为国家/地区参数传递。

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

图9:显示了加拿大的供应商。

默认显示所有供应商。

第一次访问页面时,我们可能不想显示任何供应商,而是希望首先显示所有供应商,并允许用户通过在文本框中输入国家/地区名称来缩小列表。当文本框为空时,将一个空值作为国家输入参数传递给类SuppliersBLL的GetSuppliersByCountry(国家)方法。这个空值被传递给DAL图层的GetSupplierByCountry(国家)方法,在那里它将被转换为数据库中的空值,并用作以下查询的@Country参数:

从供应商中选择供应商、公司名称、地址、城市、国家、电话,其中国家=@国家表达式国家=空始终返回假,除非某些记录的国家字段值恰好为空,否则不返回任何数据。

为了在文本框为空时返回所有的供应商,我们可以在BLL层的GetSuppliersByCountry(国家)方法中加入:当参数Country为null时,调用GetSuppliers()方法,而在其他情况下,调用DAL层的GetSuppliersByCountry(国家)方法。这将达到以下效果:当没有指定国家时,返回所有国家,当提供国家参数时,返回供应商的适当子集。

按如下方式更改类别供应商的获取供应商国家(地区)方法:

公共北风。SuppliersDataTable GetSuppliersByCountry(字符串国家){ if(字符串。IsNullOrEmpty(国家))返回GetSuppliers();否则返回适配器。GetSuppliersByCountry(国家/地区);}通过此更改,第一次访问页面DeclarativeParams.aspx(或当文本框CountryName为空时)将显示所有供应商。

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

图10:现在,默认显示所有供应商。

摘要

要将该方法用于输入参数,我们需要在ObjectDataSource的SelectParameters集合中指定参数的值。不同的参数类型允许从不同的参数源获取其值。默认参数类型使用硬编码的值,但是从querystiring、Session变量、cookies或用户从页面上的Web控件输入的值中获取参数也非常方便,甚至无需编写一行代码。

本章中的教程通过几个示例说明了如何在数据源中使用参数。但是,有时我们可能需要使用不能为空的参数,例如当前日期和时间,或者访问者的用户标识(如果我们的网站使用成员身份)。在这些情况下,我们可以通过编程预设ObjectDataSource调用的方法的参数值。在下一章的教程中,我们将看看如何实现这一点。

编程快乐!

作者简介

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

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