2015-02-11 47 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方法,你需要以暴露在過濾器值傳遞