2011-08-05 66 views
1

好吧,所以我对DevExpress有点新,我跳入现有项目的中间,该项目大量使用绑定到LinqDataSource的DevExpress网格并利用网格内置过滤。以下是我正在查看的内容的快速概览:基于EF4部分属性值过滤器DevExpress网格

  • 网格绑定到名为“Review”的EF4实体集合。
  • 我已通过包含名为“IsCurrent”属性的分部类扩展Review实体。 IsCurrent包含一些返回布尔值的逻辑。
  • 网格的初始数据源包含当前用户可能看到的所有评论。
  • 我们利用DevExpress的内置功能来保存网格布局。使用过滤器构建器,我们可以过滤Review实体的本地属性(即生成的实体模型中存在的属性)。因此,如果“名称”是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 [IsCurrent] = true

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

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

+0

你使用XtraGrid吗? – mservidio

+0

ASPxGridView - 这是一个ASP.NET Web窗体应用程序。 – Scott

回答

1

this community devexpress thread中,您将找到有关使用LinqServerModeDataSource的自定义属性限制的说明(请参阅:最佳回复)。取决于你的约束来寻找另一个解决方案。

+0

真棒,谢谢! – Scott

0

更改过滤器后,您可能必须重新绑定数据或刷新基础数据。

+0

如果是这样的话,我不认为我的其他过滤功能会起作用。我应该澄清,过滤完全按照大部分的预期工作。这是我试图过滤的唯一属性,它包含在分部类中,而不是生成的实体模型,并且是过滤不起作用的唯一属性。 – Scott

+0

当您的IsCurrent获取器返回true时会发生什么?另外,IsCurrent只是一个getter,还是它也有一个setter? – mservidio

+0

它只有一个吸气。 IsCurrent正在返回正确的值。我在网格中添加了一个绑定列,这样我就可以看到每行的IsCurrent的值,并且它们都是正确的。它只是不过滤。 – Scott