2011-08-02 72 views
0

我有一個帶有dojox.grid.enhanced.plugins.Filter和dojo.store的dojox.grid.EnhancedGrid內存包裝在dojo.data.ObjectStore中。每當我嘗試過濾時,所有記錄都從網格中移除。我收到'0顯示的項目'消息。當我點擊「清除過濾器」網格保持空白。Dojo:dojox.grid.enhanced.plugins.Filter - 所有項目在過濾時從網格中清除

更新: 情節變厚。看來只是按列排序網格會清除網格。我試圖在這裏找到一個基本示例:http://jsfiddle.net/wp64T/4/

回答

0

我有same problem,只能通過在一些jQuery的幫助下定期在後臺運行網格過濾器來解決它。這裏是一些示例代碼;希望這可以幫助別人解決這個問題。

// ADD JQUERY 
<script src="http://code.jquery.com/jquery-latest.js"></script> 

// PUT THIS IN THE <HEAD> OF THE PAGE 
<script type="text/javascript"> 
    $(document).ready(function() { 
     function filterTheDataGrid() { 
      if (dijit.byId("grid") != undefined) { 
       dijit.byId("grid").filter({color: "Red"}); 
      } 
     } 
    // RUN THE filterTheDataGrid FUNCTION EVERY ONE SECOND (1000 MILLISECONDS) // 
    // LOWER '1000' FOR FASTER REFRESHING, MAYBE TO 500 FOR EVERY 0.5 SECOND REFRESHES // 
    var refreshDataGrid = setInterval(function() { filterTheDataGrid(); }, 1000); 
    } 
</script> 

// PUT THIS IN THE <HEAD> OF THE PAGE 
<script type="text/javascript"> 
    // SETUP THE LAYOUT FOR THE DATA // 
    var layoutItems = [[ 
    { 
     field: "id", 
     name: "ID", 
     width: '5px', 
     hidden: true 
    }, 
    { 
     field: "color", 
     name: "Color", 
     width: '80px' 
    } 
]]; 

// Create an empty datastore // 
var storeData = { 
    identifier: 'id', 
    label: 'id', 
    items: [] 
} 
var store3 = new dojo.data.ItemFileWriteStore({data : storeData}); 
</script> 

// PUT THIS IN THE <HTML> OF THE PAGE 
<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutItems" query="{ type: '*' }" clientSort="true" rowsPerPage="40"></div> 

<script type="text/javascript"> 
function addItemToGrid(formdata) { 
    // THIS FUNCTION IS CALLED BY A DIALOG BOX AND GETS FORM DATA PASSED TO IT // 
    var jsonobj = eval("(" + dojo.toJson(formData, true) + ")"); 

    var myNewItem = { 
     id: transactionItemID, 
     color: jsonobj.color 
    }; 
    // Insert the new item into the store: 
    store3.newItem(myNewItem); 
    store3.save({onComplete: savecomplete, onError: saveerror}); 
} 
</script> 
+0

我實際上修改了我的代碼並創建了一個備用答案,以便每過x毫秒就不會不必要地運行過濾器,而是隻在將新項添加到數據網格後才運行。 [CLICK HERE](http://stackoverflow.com/questions/8172447/dojo-setquery-on-datagrid-all-items-disappear/8216950#8216950) –

0

您能否提供一個代碼片段或jsFiddle?如果沒有它,我可以提供的最佳猜測是您試圖過濾不存在​​的商店值,並且您的清除過濾器按鈕只會修改文本框,並且不會重新啓動過濾器命令來重置它。

編輯:

請嘗試http://download.dojotoolkit.org/release-1.4.0/dojo-release-1.4.0/dojox/grid/tests/test_data_grid.html

三控制檯命令:

dijit.byId( 「網格」)過濾器({名: 「A *」}) 會給所有開始於A.

dijit.byId(「grid」)。filter({name:「*」}) 將給出原始結果集(全部)。

dijit.byId(「grid」)。filter({name:「」}) 將清除網格,沒有任何匹配。

我知道這不是你正在使用的API(dojo.data.ObjectStore),但它應該遵循相同的邏輯。我的猜測是你最終試圖過濾「」並且什麼都不匹配,導致你的零元素網格。不要忘了星號,如果你想要做的開始寬度/包含/結束寬度。

+0

http://jsfiddle.net/wp64T/4/ - 我似乎無法得到現在的基本示例。錯誤:「dojo.store未定義」。 – waigani

相關問題