如何動態修改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();
}