基于EF4部分类属性值的DevExpress网格过滤

本文关键字:DevExpress 网格 过滤 属性 EF4 分类 基于 | 更新日期: 2023-09-27 18:04:34

好的,所以我对DevExpress有点不熟悉,我正在跳入一个现有项目的中间,该项目大量使用绑定到LinqDataSource的DevExpress网格并利用网格内置过滤。下面是我正在查看的内容的快速概述:

  • 网格绑定到一个名为"Review"的EF4实体集合。
  • 我通过一个包含一个名为"IsCurrent"属性的部分类扩展了Review实体。IsCurrent包含一些返回布尔值的逻辑。
  • Grid的初始数据源包含当前用户可能看到的所有评论。
  • 我们利用DevExpress的内置功能来保存网格布局。使用Filter Builder,我们可以过滤Review实体的本地属性(即存在于生成的实体模型中的属性)。因此,如果"Name"是Review实体的成员,那么在[Name]='Test'上进行过滤就可以了。

我真正想做的是过滤器也基于我在部分类"IsCurrent"中创建的属性。然而,当我修改保存在数据库中的过滤器字符串并将[IsCurrent]=true添加到过滤器字符串时,我得到一个完全空的结果集。我试着把它切换到false,但它仍然是空的。

是否有可能对部分类的成员而不是生成的实体模型的属性进行过滤?如果没有,是否有一个可接受的解决方案?

下面是一些示例代码,说明了一些重要的部分(尽管非常简化):

    protected void LinqServerModeDataSource1_OnSelecting(object sender, 
LinqServerModeDataSourceSelectEventArgs e)
            {
        e.QueryableSource = GetAllRecords();
    }

Review.cs部分:

public partial class Review
{
    public bool IsCurrent
    {
       if (something)
           return true;
       else
           return false;
    }   
}

DevExpress filter string:

filter[IsCurrent] = true

如果我将过滤器更改为:filter[Name='Test'],它工作得很好,并显示了所有名称为Test的记录。返回到[IsCurrent]=true只会显示一个空集合。我确信结果集包含应该显示的有效数据。

任何想法?如果我尝试过滤在部分类中创建的值,似乎它不起作用,但适用于从生成的实体模型获得的值。

基于EF4部分类属性值的DevExpress网格过滤

在这个社区devexpress线程中,您将找到对使用LinqServerModeDataSource自定义属性的限制的解释(参见:Vest回复)。取决于你的约束条件来找到另一个解。

您可能需要在更改过滤器后重新绑定数据或刷新底层数据。