2010-11-29 3 views
0

Kann jemand FilterExpression mit einem ObjectDataSource verwenden, wenn es mit einer Select-Methode gebunden ist, die eine Liste von Entitätsobjekten zurückgibt?Aktivieren der Filterung für eine ObjectDataSource mit FilterExpression bei Bindung an eine Liste <object>.

bekomme ich folgende Fehlermeldung, wenn ich es versuchen:

„Die Datenquelle‚testODS‘unterstützt nur Filterung, wenn die Select ein DataSet oder eine Datatable zurückgibt“

+0

Sorry, der Titel der Frage sagt "Sortieren", aber ich meinte eigentlich Filterung. – user479843

+0

Dann verwenden Sie Bearbeiten .. –

+0

habe nicht daran gedacht .. ich habe es aktualisiert. – user479843

Antwort

1

Nach MSDN

Das ObjectDataSource-Steuerelement unterstützt das Filtern von Daten nur, wenn die Select -Methode ein DataSet- oder DataTable -Objekt zurückgibt.

Wenn Sie also Ihre Ergebnismenge von Entitäten filtern möchten, können Sie stattdessen eine LinqDataSource verwenden.

<asp:LinqDataSource ID="LinqDataSource1" runat="server" 
    ContextTypeName="MyNamespace.MyDataContext" 

     Select="new (MyId, MyProperty1, MyCollection1.MyProperty2)" 
     TableName="MyTable" Where="MyProperty1.Contains(@PropertyFilter)" > 
     <WhereParameters> 
      <asp:ControlParameter ControlID="txtPropertyFilter" Name="PropertyFilter" 
       PropertyName="Text" Type="String" /> 
     </WhereParameters> 
</asp:LinqDataSource> 
1

Warum nicht einfach tun, was der Fehler sagt und ein DataTable oder DataSet verwenden?

Convert generic list to dataset in C#

+0

Ja, nur das Problem ist, dass dieser Teil des Codes bereits geschrieben wurde und nicht in der Lage sein wird, ihn zu ändern .. ok, ich werde es anders versuchen. Danke an alle! – user479843

0

einen Parameter auswählen Verwendung für die ODS die Filtervariable zu halten. Objektmethode

<asp:ObjectDataSource ID="odsResults" runat="server" 
     OldValuesParameterFormatString="original_{0}" SelectMethod="GetSearchResults" 
     TypeName="LiftSearchResults" SortParameterName="sortType"> 
     <SelectParameters> 
      <asp:Parameter Name="liftID" Type="Int32" /> 
      <asp:Parameter Name="sortType" Type="String" /> 
      <asp:Parameter Name="range" Type="Int32" /> 
     </SelectParameters> 
    </asp:ObjectDataSource> 

Daten:

[DataObjectMethod(DataObjectMethodType.Select, false)] 
    public List<SearchResultsLift> 
     GetSearchResults(
     int liftID, 
     string sortType, 
     int range 
     ) 
    {   
    List<SearchResultsLift> returnList = 
     new List<SearchResultsLift>(); 

     ...Code to populate list... 

     if (range != 0) 
     returnList = FilterByRange(returnList, range); 

     returnList = GetListSort(returnList, sortType); 
    return returnList; 
} 

Wenn der Bereichsparameter explizit auf der Seite gesetzt wird 0 zurück, und alle Datensätze zurückgegeben werden. GetListSort (nicht gezeigt) ist eine Sortierfunktion.

private List<SearchResultsLift> 
    FilterByRange(List<SearchResultsLift> filterList, int range) 
{ 
    var fList = (from srl in filterList 
       where 
       srl.DistanceFromDestination <= range && 
       srl.DistanceFromStart <= range 
       select srl).ToList<SearchResultsLift>(); 
     return fList; 
} 
} 
Verwandte Themen