2011-04-08 3 views
1

grid.filter (query, rerender)를 사용하여 이미 필터링 한 DataGrid가 있습니다. 다른 항목을 추가하면 save()를 호출 한 후 필터 때문에 표시되지 않아도 그리드에 새 항목이 표시됩니다. "저장을 마치면 다시 필터링 할 것입니다. 그러나 동일한 쿼리로 grid.filter를 호출 한 후에 모든 행이 사라집니다. 내가 잘못했을 수있는 아이디어가 있습니까?도장 DataGrid를 다시 채우는 방법은 무엇입니까?

그리드를 필터링 : 당신의 addItemToGrid 기능의 내부 그리드

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

답변

0

에 새 항목을 추가 할

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

코드, 당신의 저장 방법에 onComplete를 청취자를 추가하려고 분류 또는의 onComplete에 그리드를 필터링 함수

+0

시도했지만 작동하지 않았습니다. 동일한 결과, 빈 눈금 – pgmura

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 밀리 초마다 불필요하게 실행되지 않고 대신 새 항목이 데이터 격자에 추가 된 후에 만 ​​실행됩니다. [여기를 클릭하십시오] (http://stackoverflow.com/questions/8172447/dojo-setquery-on-datagrid-all-items-disappear/8216950#8216950) –

1

봅니다 사용하는 대신 store.addItem (인 newItem)의

store.newItem(newItem); 

을; (addItem은 저장소에 항목을 추가하는 표준 방법이 아닙니다.)

관련 문제