2012-04-16 64 views
1

我有一個DropDownList,加載數據從ObjectDataSource,它返回ArrayList<MyObject>。我想知道,如何篩選返回的ArrayList如何篩選ObjectDataSource返回的對象?

例如,MyObject類的其中一個屬性是'IsCompulsory'。一旦ODS加載ArrayList<MyObject>並將數據綁定到DropDownList之前,我想要刪除所有對象IsCompulsory = false

我該怎麼做?我以爲ObjectDataSourceOnSelected事件是個好地方,但我該如何過濾這個值&我應該怎麼回報呢?

回答

0

您可以使用LINQ要做到這一點,如下圖所示:

List<MyObject> filteredObjects = (from MyObject obj in sourceObjects 
              where obj.IsCompulsory == false 
              select obj).ToList<MyObject>(); 

假設你有你的列表中sourceObjects(被過濾)。

P.S.不要忘記添加using System.Linq;以上才能正常工作。

編輯:您需要使用filteredObjectsDataSourceDropDownList現在。

+0

權。我知道如何過濾數據。試圖知道在哪裏做。它必須在'asp:ObjectDataSource'的某個事件中。它可能是'OnSelected',不確定,並且不知道如何返回過濾器數據。 – 2012-04-16 21:02:18

1

我相信OnSelected方法可能來不及過濾數據。另一種方法可能是在ObjectDataSource上使用Parameters以僅查詢您需要的數據。這實際上可以提高性能。您可以以聲明方式或以編程方式設置它們。

下面是一個例子(見下面的鏈接,一個完整的例子):

<asp:objectdatasource 
    ID="ObjectDataSource1" 
    runat="server" 
    SelectMethod="GetMyObject" 
    TypeName="MyNamespace.MyClass" > 
    <SelectParameters> 
    <asp:ControlParameter ControlID="CheckBox1" DefaultValue="false" Name="myCondition" /> 
    </SelectParameters> 
</asp:objectdatasource> 

完整的示例:

http://msdn.microsoft.com/en-us/library/57hkzhy5.aspx

+0

我知道這種方法。在我的情況下,我必須在幾個地方使用相同的API,並且在將其綁定到我的控件之前,必須過濾返回的數據。 – 2012-04-16 20:57:25

+0

嗯我不知道你是否可以在不修改你的API並且仍然使用ObjectDataSource控件的情況下完成你所需要的。我很好奇其他人對此有何評論。 – Ulises 2012-04-17 00:51:23