[英]Filtering an ASP.NET ObjectDataSource?
我在标准的ASP.NET WebForm中有一个ObjectDataSource,它允许通过仅加载用户正在查看的页面所需的数据来进行有效的分页。 我现在想要过滤特定列上的结果(比如列Customer),你会怎么做?
<asp:ObjectDataSource ID="ticketsDataSource" runat="server"
SelectMethod="GetTicketsData" EnablePaging="true"
MaximumRowsParameterName="pageSize"
StartRowIndexParameterName="startRowIndex"
TypeName="SupportSystem.App_Code.TicketsDataSource" SelectCountMethod="TotalRowCount">
<SelectParameters>
<asp:Parameter Name="startRowIndex" Type="Int32" />
<asp:Parameter Name="pageSize" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
我之前在代码中执行的操作如下所示,但这意味着一旦添加了大量的票证,在分页等时网格非常慢,因为它在渲染之前加载了所有数据等。
DataSet ds = new DataSet();
Dictionary<string, object> d = new Dictionary<string, object>();
d.Add("@params", "");
ds.ReadXml(new System.IO.StringReader(Database.DAL_XML("Usp_Fetch_Tickets", d).OuterXml));
if (Database_error(ds))
{
return;
}
var dv = ds.Tables[0].DefaultView;
dv.RowFilter = "Customer LIKE '%abc%'";
var newDS = new DataSet();
var newDT = dv.ToTable();
newDS.Tables.Add(newDT);
gvTickets.DataSource = newDS;
gvTickets.DataBind();
有关如何有效过滤ObjectDataSource的任何想法?
您好您可以使用FilterExpression
为此目的。 以下是示例代码段如何实现。
<asp:objectdatasource
id="ObjectDataSource1"
runat="server"
selectmethod="GetAllEmployeesAsDataSet"
typename="Samples.AspNet.CS.EmployeeLogic"
filterexpression="FullName='{0}'" OnFiltering="ObjectDataSource1_Filtering">
<filterparameters>
<asp:formparameter name="FullName" formfield="Textbox1" defaultvalue="Nancy Davolio" />
</filterparameters>
</asp:objectdatasource>
更多信息可以在以下msdn页面上找到此链接
您可以使用标记中的FilterParameters
属性,然后指定其中一个Parameter
子类。 例如,假设您有一个TextBox
,您提供用户输入客户名称以过滤该客户的结果,您将需要使用ControlParameter
...
<asp:ObjectDataSource>
<FilterParameters>
<asp:ControlParameter ControlID="txtCustomer" PropertyName="Text" Name="customerName" />
</FilterParameters>
</asp:ObjectDataSource>
这里txtCustomer
将是TextBox
的ID, Text
是该TextBox
的属性,用于获取输入值,而customerName
是GetTicketsData
方法中的一个参数,您需要公开该参数以传递过滤器值
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.