最近在使用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();
}