2012-04-16 68 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