stand on the shoulders of giants

【ASP.NET Step by Step】之五 Declarative Parameters

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获取参数,

 


 

posted @ 2008-12-01 17:03  DylanWind  阅读(176)  评论(0编辑  收藏  举报