我有一个DataGrid,我已经使用grid.filter(查询,重新渲染)进行了过滤。如果我添加另一个项目,在调用save()后,我会在网格中看到新项目,即使它因为过滤器而不应显示。我正在考虑“好吧,我会在商店完成保存时再次过滤它。但是在使用相同查询调用grid.filter之后,所有行都会消失。任何想法我可能做错了什么?
过滤网格的代码:
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 :(得分:1)
尝试使用:
store.newItem(newItem);
而不是store.addItem(newItem); (addItem不是将商品添加到商店的标准方法)
答案 1 :(得分:0)
在addItemToGrid函数内部,尝试将onComplete侦听器添加到save方法,并在onComplete函数中对网格进行排序或过滤
store.save({onComplete: function() {
grid.filter({name: queryValue}, true);
}
});
答案 2 :(得分: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>