2015-02-11 49 views
1

我有一个标准的ASP.NET WebForm中的ObjectDataSource,它允许通过只加载用户正在查看的页面所需的数据进行有效的分页。我现在想过滤特定列上的结果(比如Customer列),你会怎么做呢?过滤ASP.NET 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的任何想法?

回答

3

嗨,您可以使用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

+0

谢谢,这看起来不错,如果我想多个过滤器,我可以使用{1} {2}等,并指定更多的asp:formparameter? – Apqu 2015-02-11 09:27:43

+0

是的你是对的。如果这有助于您将此标记为已回答。祝你好运 – 2015-02-11 09:29:59

+0

不错,将尝试那么+1,谢谢:-) – Apqu 2015-02-11 09:30:33

0

您可以使用标记中的FilterParameters属性,然后指定其中一个Parameter子类。例如,假设您有提供用户输入用户名,以过滤由该客户的结果TextBox,你将需要使用此一ControlParameter ...

<asp:ObjectDataSource> 
     <FilterParameters> 
      <asp:ControlParameter ControlID="txtCustomer" PropertyName="Text" Name="customerName" /> 
     </FilterParameters> 
</asp:ObjectDataSource> 

这里txtCustomer将是在TextBox的ID,Text是控制来获取输入值的财产和customerNameGetTicketsData方法,你需要以暴露在过滤器值传递