1. 使用硬编码参数值
添加一DetailsView控件到BasicReporting文件夹里的DeclarativeParams.aspx页面,
选择数据源ProductsBLL ,方法选择为GetProductByProductID(productID)
当访问本页面,Data Web服务器控件将调用ObjectDataSource的Select方法,这将调用类ProductsBLL的GetProductByProductID(productID),并使用“5”这个硬编码的值作为输入参数productID 。此方法将返回一个强类型的ProductDataTable对象,它包含一个数据行 - Chef Anton’s Gumbo Mix的信息(ProductID为5的产品)。
2. 使用控件输入作为参数
在上图中选择Parameter source为Control, 选择你想要的ControlID就可以了;例如textbox,会将textbox的text属性作为传入参数:
<asp:ObjectDataSource ID="ObjectDataSource2" runat="server"
SelectMethod="GetSuppliersByCountry" TypeName="SuppliersBLL">
<SelectParameters>
<asp:ControlParameter ControlID="CountryName" Name="country" PropertyName="Text"
Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
注意,控件为空,GridView控件仍然会调用ObjectDataSource的Select方法,当文本框空白时,一个null值被传递到类SuppliersBLL的GetSuppliersByCountry(country)方法作为country输入参数。这个null值继续被传递到DAL层的GetSupplierByCountry(country)方法,在那里它会被转换成数据库里的NULL值(DBNull.Value),用作下面这个查询的@Country参数:
SELECT SupplierID, CompanyName, Address, City, Country, Phone
FROM Suppliers
WHERE Country = @Country
表达式Country = NULL总是返回False,除非有某些记录Country字段的值恰好为NULL,否则不返回任何数据。
一旦访问正输入一个国家,然后点击按钮触发一次回传(postback),ObjectDataSource的Select方法被请求,同时传递文本框的Text值作为country参数。
如果想让空值时,显示所有的供应商,更改SuppliersBLL
public Northwind.SuppliersDataTable GetSuppliersByCountry(string country)
{
if (string.IsNullOrEmpty(country))
return GetSuppliers();
else
return Adapter.GetSuppliersByCountry(country);
}
4. 也可以从querystiring,Session变量,cookies获取参数,