2011-08-05 100 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