如何:筛选视图中的数据

此示例演示如何在视图中筛选数据。

示例

若要创建筛选器,请定义提供筛选逻辑的方法。 该方法用作回叫并接受 object 类型的参数。 以下方法返回 filled 属性设置为“No”的所有 Order 对象,筛选掉其余对象。

public bool Contains(object de)
{
    Order order = de as Order;
    //Return members whose Orders have not been filled
    return(order.Filled== "No");
}
Public Function Contains(ByVal de As Object) As Boolean
    Dim order1 As Order = TryCast(de, Order)
    Return (order1.Filled Is "No")
End Function

可以应用筛选器,如以下示例所示。 在此示例中,myCollectionView 是一个 ListCollectionView 对象。

myCollectionView.Filter = new Predicate<object>(Contains);
Me.myCollectionView.Filter = New Predicate(Of Object)(AddressOf Me.Contains)

要撤消筛选,你可以将 Filter 属性设置为 null

myCollectionView.Filter = null;
Me.myCollectionView.Filter = Nothing

有关如何创建或获取视图的信息,请参阅获取数据收集的默认视图。 有关完整示例,请参阅视图示例中的排序和筛选项

如果视图对象来自对象 CollectionViewSource,则通过设置 Filter 事件的事件处理程序来应用筛选逻辑。 在下面的示例中,listingDataViewCollectionViewSource 的实例。

listingDataView.Filter += new FilterEventHandler(ShowOnlyBargainsFilter);
AddHandler listingDataView.Filter, AddressOf ShowOnlyBargainsFilter

下面显示了示例 ShowOnlyBargainsFilter 筛选器事件处理程序的实现。 此事件处理程序使用 Accepted 属性筛选掉 CurrentPrice 为 $25 或更高的 AuctionItem 对象。

private void ShowOnlyBargainsFilter(object sender, FilterEventArgs e)
{
    AuctionItem product = e.Item as AuctionItem;
    if (product != null)
    {
        // Filter out products with price 25 or above
        if (product.CurrentPrice < 25)
        {
            e.Accepted = true;
        }
        else
        {
            e.Accepted = false;
        }
    }
}
Private Sub ShowOnlyBargainsFilter(ByVal sender As Object, ByVal e As FilterEventArgs)
    Dim product As AuctionItem = CType(e.Item, AuctionItem)
    If Not (product Is Nothing) Then
        'Filter out products with price 25 or above
        If product.CurrentPrice < 25 Then
            e.Accepted = True
        Else
            e.Accepted = False
        End If
    End If
End Sub

另请参阅