博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
声明式参数5
阅读量:5200 次
发布时间:2019-06-13

本文共 4860 字,大约阅读时间需要 16 分钟。

简介

在  中我们了解了使用绑定到 ObjectDataSource 控件(该控件从 ProductsBLL 类调用 GetProducts() 方法)的GridView 、DetailsView 和 FormView 控件显示数据。GetProducts() 方法返回一个强类型DataTable ,其内容为来自 Northwind 数据库的 Products 表的所有记录。ProductsBLL 类包含其他用于返回产品子集的方法 - GetProductByProductID(productID) 、GetProductsByCategoryID(categoryID) 和GetProductsBySupplierID(supplierID) 。这三个方法带一个输入参数,指明如何筛选返回的产品信息。

可使用 ObjectDataSource 来调用带输入参数的方法,不过我们必须指定这些参数值的来源。参数值可以是固定的,也可以是动态的变量,包括:查询字符串值、Session 变量、页面中 Web 控件的属性值或者其他。

本课程中,我们将从如何使用设置为固定值的参数开始。具体来说,我们先将DetailsView 添加到显示特定产品信息的页面(该产品即Chef Anton 的Gumbo Mix ,ProductID 为 5 )。然后,我们将了解如何基于 Web 控件设置参数值。特别是,我们将使用TextBox 让用户输入国家,之后可以单击按钮查看该国家的供应商列表。

使用固定参数值

第一个示例,我们向 BasicReporting 文件夹中的DeclarativeParams.aspx 页面添加 DetailsView 控件。从 DetailsView 的智能标记中选取下拉列表中的 <New data source> ,然后选择添加 ObjectDataSource 。

图1 :向页面添加ObjectDataSource

这将自动启动 ObjectDataSource 控件的Choose Data Source 向导。从向导的第一个屏幕选择 ProductsBLL 类。

图2 :选择ProductsBLL 类

因为我们要显示具体产品的信息,所以要使用GetProductByProductID(productID) 方法。

图3 :选择GetProductByProductID(productID) 方法

由于我们选择的方法带有参数,需要在另一个向导屏幕中定义该参数要使用的值。左侧的列表显示所选方法的所有参数。而GetProductByProductID(productID) 方法只有一个参数 – productID 。我们可以在右侧指定所选参数的值。参数来源下拉列表列举了参数值的各种可能的来源。因为我们要为productID 参数指定固定值 5 ,所以保留参数来源为 None 并在 DefaultValue 文本框输入 5 。

图4 :productID 参数将使用固定值5

完成 Configure Data Source 向导后,ObjectDataSource 控件的声明标记中包含有 SelectParameters 集合(该集合包含有在 SelectMethod 属性中所定义的方法需要的每个输入参数)的Parameter 对象。由于本示例中我们正在使用的方法只需要一个输入参数parameterID ,这里只有一个条目。SelectParameters 集合可能包含有从System.Web.UI.WebControls 命名空间中的Parameter 类所派生的任意类。对于固定参数值,使用Parameter 类,而对于其他参数源选项,则使用派生的Parameter 类;需要的话,您也可以创建自己的  。

      
          

注意:如果您在自己的计算机上操作,此时您看到的声明标记可能包含有InsertMethod 、UpdateMethod 和 DeleteMethod 属性以及DeleteParameters 的值。ObjectDataSource 的 Choose Data Source 向导自动从ProductBLL 指定用于插入、更新和删除的方法,因此除非明确地将这些方法跳过,否则他们将包含于以上标记中。

浏览本页时,Web 数据控件将调用ObjectDataSource 的 Select 方法,该方法将调用 ProductsBLL 类的 GetProductByProductID(productID) 方法,其中productID 输入参数使用固定值 5 。该方法将返回一个强类型 ProductDataTable 对象,该对象包含有一行关于 Chef Anton 的Gumbo Mix (该产品的 ProductID 为 5 )的信息。

图5:显示关于Chef Anton 的 Gumbo Mix 的信息

将参数值设置为 Web 控件的属性值

也可以基于页面中 Web 控件的值来设置ObjectDataSource 的参数值。为了说明本操作,我们使用一个GridView ,该GridView 列出了用户所指定国家的所有供应商的列表。让我们在页面中添加一个文本框(TextBox), 这个文本框用于用户输入想要查询的国家的名称 。将该 TextBox 控件的 ID 属性设置为 CountryName 。再添加一个 Web 按钮控件。

图6 :向有ID CountryName 的页面添加 TextBox

接下来,向页面添加 GridView ,并从智能标记选择添加新的 ObjectDataSource 。由于我们要显示供应商信息,因此从向导的第一个屏幕选择SuppliersBLL 类。在第二个屏幕选择 GetSuppliersByCountry(country) 方法。

图7 :选择GetSuppliersByCountry(country) 方法

由于 GetSuppliersByCountry(country) 方法带有输入参数,向导还包含有一个屏幕用于选择参数值。此时,将Parameter 源设置为 Control 。该操作将以页面中控件的名称填充 ControlID 下拉列表;从列表中选择 CountryName 控件。第一次访问该页面时,CountryName 文本框将为空白,因此不返回任何结果,显示空白内容。如果想默认显示某些结果,则相应地设置DefaultValue 文本框。

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

ObjectDataSource 的声明标记与我们第一个示例稍微不同,它使用  而不是标准的 Parameter 对象。ControlParameter 的其他属性可指定 Web 控件的 ID 以及用这个控件哪个属性值(PropertyName) 给参数赋值。Configure Data Source 向导可以智能确定,对于TextBox 控件,我们可以使用Text 属性给参数赋值。不过,如果想要使用与Web 控件其他的属性值,可以在这里更改PropertyName 值或者单击向导中的"Show advanced properties" 链接。

      
          

首次访问该页面时,CountryName 文本框为空白。GridView 仍然调用ObjectDataSource 的 Select 方法,但向 GetSuppliersByCountry(country) 方法传递的是null 值。TableAdapter 将 null 值转换为数据库 NULL 值 (DBNull.Value) ,使用 GetSuppliersByCountry(country) 方法的查询被传入空值,当为 @CategoryID 参数指定 NULL 值时,不会返回任何结果。简而言之,不返回任何供应商。

不过,当访问者输入一个国家,单击Show Suppliers 按钮进行回传时,将重新询问 ObjectDataSource 的 Select 方法,将 TextBox 控件的文本值传递给conntry参数。

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

默认显示所有的供应商

当第一次查看页面时,我们可能希望先显示所有 的供应商,使用户能通过在文本框中输入国家名来减少列表,而不是什么都不显示。当文本框为空时,SuppliersBLL 类的GetSuppliersByCountry(country) 方法中为country 输入参数传递的是 null 值。随后该 null 值传递到 DAL 的GetSupplierByCountry(country) 方法,此时该值转换为数据库NULL 值,用于随后查询中使用的@Country 参数:

SELECT     SupplierID, CompanyName, Address, City, Country, Phone  FROM         Suppliers  WHERE Country = @Country

表达式 Country = NULL 总是返回False ,即使对 Country 列为 NULL 值的记录也是这样;因此不返回任何记录。

要想在国家文本框为空时返回所有 供应商,我们可以在BLL 中 扩展GetSuppliersByCountry(country) 方法,当 country 参数为null 时它将调用 GetSuppliers() 方法,其他情况下调用 DAL 的 GetSuppliersByCountry(country) 方法。这样当不指定任何国家时将返回所有供应商,而包含国家参数时返回相应供应商子集。

在 SuppliersBLL 类中将GetSuppliersByCountry(country) 方法修改为:

public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)  {      if (string.IsNullOrEmpty(country))          return GetSuppliers(); else return Adapter.GetSuppliersByCountry(country); }

修改后,在首次访问DeclarativeParams.aspx 页面(或者当 CountryName 文本框为空)时显示所有供应商。

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

小结

要使用带输入参数的方法,我们需要在ObjectDataSource 的 SelectParameters 集合中为这些参数指定值。不同类型的参数考虑从不同的源获取参数值。除了默认参数类型使用固定值,我们还可以轻松的(无需编写任何代码)从查询字符串、Session 变量、cookie ,以及来自页面的Web 控件的用户输入的值获取参数值。

本教程的示例说明了怎样使用声明式参数值。不过,有些时候,我们可能会遇到这样的情况,我们的需要的参数源不可用,例如当前日期与时间,或者网站访问者的Membership 、User ID 。这些情况下,我们可以在 ObjectDataSource 调用其底层对象的方法之前用编程方式设置参数值。下一教程中我们将了解怎样实现这个功能。

快乐编程!

转载于:https://www.cnblogs.com/uddgm/articles/5451179.html

你可能感兴趣的文章
poj 3177 边双联通 **
查看>>
java.lang.UnsupportedOperationException
查看>>
java-斐波那契数列的解法
查看>>
rackup工具
查看>>
Linux operating system (Ubuntu) 学习-1
查看>>
ajax-原生写法步骤
查看>>
.Net语言 APP开发平台——Smobiler学习日志:如何在手机上实现饼图图表
查看>>
svn完整备份迁移
查看>>
Python字典实现分析
查看>>
jenkins+testNG
查看>>
Java自定义范型的应用技巧
查看>>
[洛谷1485] 火枪打怪
查看>>
白话经典算法系列之六 快速排序 快速搞定
查看>>
错了:用流量能够放肆,有wifi则要节制
查看>>
CSS渐变字体、镂空字体、input框提示信息颜色、给图片加上内阴影、3/4圆
查看>>
https://zhidao.baidu.com/question/362784520674844572.html
查看>>
第八周
查看>>
my.cnf_For5.7_注释版
查看>>
【MFC 学习笔记】CFile读写文件
查看>>
Java 的IO操作初步(一)
查看>>