2012-08-31 27 views
2

是否可以創建一個dgrid查詢來搜索多個列上的正則表達式字符串?通常,該語法指定{column1:「foo」,column2:「foo」},但會查找column1和column2均爲「foo」的行。但我想對兩列使用相同的搜索字符串...是可能的,我將如何做到這一點?我需要像{column1 || column2:「foo」}。如何查詢多列上的dgrid

回答

5

你可以編寫你自己的函數,就像我在回答你之前的問題Is it possible to filter data in a dgrid like you can in a datagrid中提到的那樣?可以使用Resource Query Language (RQL)

dgrid查詢其商店,例如, dojo/store/Memory,默認情況下使用dojo/store/util/SimpleQueryEngine。您只需將store.queryEngine財產與的QueryEngine供您選擇。在RQL的情況下,它看起來像這樣(source):

require(["dojo/store/Memory", "rql/js-array", "dgrid/OnDemandGrid"], function(Memory, rql, Grid) { 

    var store = new Memory({ data: { /* some data here */}}); 
    store.queryEngine = rql.query; 

    var grid = new Grid({ 
     store: store, 
     columns: { /* some columns here */} 
    }, "grid") 

}); 

現在,您可以查詢dgrid與RQL語法。查詢回答你的問題:(column1=foo|column2=foo)

請看看我的jsFiddle(http://jsfiddle.net/phusick/VjJBT)。隨意到餐桌和實驗要麼dgrid本身(也有一些預定義的查詢)或DOH單元測試(開放JS控制檯查看輸出):

enter image description here

+0

感謝您的建議和幫助! 我發現我的dgrid顯示122個記錄的總記錄集的子集。這是在輸入到filterString輸入之前的任何內容。在我的情況下,我堅持使用默認的簡單查詢引擎而不是rql引擎。最初在頁面加載時,滾動條手柄很小,表示約122個記錄集。但是一旦我開始滾動它,它就會變長並且記錄集會發生變化,最終會有大約45個記錄。我還沒有應用任何查詢,所以我不確定會有什麼解釋。 – teaman

+0

我猜這是OnDemandGrid做一個懶加載,但它應用了什麼查詢,爲什麼?除了這個小故障,我的過濾器/查詢機制在多列上運行良好。我使用〜(item.Name +「」).toLowerCase()。indexOf(filterString.toLowerCase())爲每個列名使用「||」來應用您在我的另一個帖子(您回覆的)中的內容。 「之間。 – teaman