2011-04-08 70 views
1

我有一个DataGrid,我已经过滤使用grid.filter(查询,重新渲染)。如果我添加另一个项目,在调用save()之后,我会看到网格中的新项目,即使它不应该因过滤器而显示。我在想“好吧,我只是在商店完成保存时再过滤一次,但是在调用grid.filter后,所有的行都会消失,任何想法我可能会做错什么?如何重新过滤dojo DataGrid?

Code to过滤网格:

var filterQuery = dijit.byId("filterTextbox").attr("value"); 
var grid = dijit.byId("grid"); 
var queryValue = "*"; 
if(filterQuery != ""){ 
    queryValue += filterQuery + "*"; 
} 
grid.filter({name: queryValue}, true); 

代码到新的项目添加到网格

function addItemToGrid(newItemName){ 
    var newItem = {name: newItemName}; 
    var grid = dijit.byId("grid"); 
    var store = grid.store; 
    store.addItem(newItem); 
    store.save(); 
} 

回答

0

里面你addItemToGrid功能,尝试添加的onComplete侦听到您保存方法和排序还是在的onComplete滤网格功能

store.save({onComplete: function() { 
     grid.filter({name: queryValue}, true); 
    } 
}); 
+0

我试过了,它不起作用。同样的结果,一个空白网格 – pgmura 2011-04-13 20:30:02

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) – 2011-11-21 18:55:42

1

尝试使用:

store.newItem(newItem); 

代替store.addItem(的newitem); (addItem不是将商品添加到商店中的标准方法)