[英]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.