1. 程式人生 > >如何動態修改ObjectDataSource資料來源的查詢引數

如何動態修改ObjectDataSource資料來源的查詢引數

最近在使用LINQ過程中,經常和ObjectDataSource打交道。有時需要動態改變一個ObjectDataSource的查詢方法或者查詢引數。

例如:我的產品庫存可以根據產品型別的下拉列表過濾,也可以根據產品編碼直接查詢。

查詢方法:GetInventoryView

呼叫引數:productcode,orderby。其中productcode繫結到產品型別的下拉列表。

當用戶輸入產品編碼進行查詢時,需要將productcode引數的值設定為使用者輸入到TextBoxFindCode中的編碼。

在程式中需要清除ObjectDataSource原有的SelectParameters,然後再重新插入新的引數SelectParameter,設定productcode引數。

aspx

    <asp:ObjectDataSource ID="ObjectDataSource_Inventory" runat="server"
        SelectMethod="GetInventoryView" TypeName="InventoryBL">
        <SelectParameters>
            <asp:ControlParameter ControlID="DrpProductTypeList" DefaultValue=""
                Name="productcode" PropertyName="SelectedValue" Type="String" />
            <asp:Parameter DefaultValue="ProductCode" Name="orderby" Type="String" />
        </SelectParameters>
    </asp:ObjectDataSource>

cs

protected void ButtonFind_Click(object sender, EventArgs e)
    {

        //複製SelectParameters
        Parameter sorting = ObjectDataSource_Inventory.SelectParameters["orderby"];
        Parameter code = new Parameter("productcode",ObjectDataSource_Inventory.SelectParameters["productcode"].Type,this.TextBoxFindCode.Text.Trim());

        //清除原有的SelectParameter
        ObjectDataSource_Inventory.SelectParameters.Clear();

        //重新加入新的SelectParameter

       ObjectDataSource_Inventory.SelectParameters.Add(code);
        ObjectDataSource_Inventory.SelectParameters.Add(sorting);
        GridViewInventory.DataBind();
    }