过滤 ASP.NET ObjectDataSource?
Filtering an ASP.NET ObjectDataSource?
我在标准 ASP.NET WebForm 中有一个 ObjectDataSource,它允许通过仅加载用户正在查看的页面所需的数据来进行有效的分页。我现在想过滤特定列(比如客户列)的结果,你会怎么做?
<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 的任何想法?
您可以使用标记中的 FilterParameters
属性,然后指定 Parameter
子 类 之一。例如,假设您有一个 TextBox
供用户输入客户名称以按该客户筛选结果,您将需要为此使用 ControlParameter
...
<asp:ObjectDataSource>
<FilterParameters>
<asp:ControlParameter ControlID="txtCustomer" PropertyName="Text" Name="customerName" />
</FilterParameters>
</asp:ObjectDataSource>
这里的txtCustomer
是TextBox
的ID,Text
是那个控件的属性来获取输入值,customerName
是 GetTicketsData
方法中的一个参数,您需要公开该参数才能传入过滤器值
您好 您可以使用 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 页面上找到其他信息
check this link
我在标准 ASP.NET WebForm 中有一个 ObjectDataSource,它允许通过仅加载用户正在查看的页面所需的数据来进行有效的分页。我现在想过滤特定列(比如客户列)的结果,你会怎么做?
<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 的任何想法?
您可以使用标记中的 FilterParameters
属性,然后指定 Parameter
子 类 之一。例如,假设您有一个 TextBox
供用户输入客户名称以按该客户筛选结果,您将需要为此使用 ControlParameter
...
<asp:ObjectDataSource>
<FilterParameters>
<asp:ControlParameter ControlID="txtCustomer" PropertyName="Text" Name="customerName" />
</FilterParameters>
</asp:ObjectDataSource>
这里的txtCustomer
是TextBox
的ID,Text
是那个控件的属性来获取输入值,customerName
是 GetTicketsData
方法中的一个参数,您需要公开该参数才能传入过滤器值
您好 您可以使用 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 页面上找到其他信息 check this link