2013-08-26 1 views
0

J'utilise Dojo Toolkit 1.9 Datagrid et je remplis des données du xmlStore mais je fais face à un problème qui est après la suppression de n'importe quel élément de la grille de données, son ne pas obtenir l'actualisation jusqu'à nous faisons l'actualisation manuelle du navigateur. Voudriez-vous s'il vous plaît quelqu'un peut me suggérer comment puis-je le faire? Le code source est ci-dessous:comment rafraichir datagrid dans dojo 1.9 après avoir supprimé un élément

<html> 
<head> 
<title>User Demo</title> 
<link rel="stylesheet" href="../dojo-release-1.9.1/dijit/themes/claro/claro.css"> 
<link rel="stylesheet" href="../dojo-release-1.9.1/dojox/grid/resources/claroGrid.css"> 
<script src='../dojo-release-1.9.1/dojo/dojo.js'></script> 
<script src='myscript.js'></script> 
<body> 
    <div id="ObjectGrid"></div> 
</body> 
</html> 
var globalUserId; 
    var appContext = "/" + (window.location.pathname).split("/")[1]; 
    require(
      [ 'dojo/dom', 'dojo/json', 'dojox/json/schema', 
        'dojox/data/JsonRestStore', 'dojox/grid/DataGrid', 
        'dojox/grid/_CheckBoxSelector', 'dojo/on', 
        'dojo/request/xhr', 'dijit/Dialog', 'dojox/data/XmlStore', 
        'dijit/form/FilteringSelect', 'dijit/Calendar', 
        'dijit/form/Form', 'dijit/form/ValidationTextBox', 
        'dijit/form/TextBox', 'dijit/form/FilteringSelect', 
        'dijit/form/Button', 'dijit/layout/TabContainer', 
        'dijit/layout/ContentPane', 'dojo/domReady!' ], 
      function(dom, JSON, schema, JsonRestStore, DataGrid, 
        _CheckBoxSelector, on, xhr) { 

       var userDataStore12 = new dojox.data.XmlStore({ 
        url : appContext + "/rest/userservice/getusers", 
        rootItem : "user" 
       }); 

       var gridCell = [{field : "userid",name : "User Id",width : '10%'}, 
         {field : "name",name : "Name",width : '15%'}, 
         {field : "email",name : "Email",width : '15%'}, 
         {field : "userName",name : "User Name",width : '10%'}, 
         {field : "phone",name : "Phone",width : '10%'}, 
         {field : "roleName",name : "Role",width : '10%'}, 
         {field : "status",name : "Status",width : '10%'}, 
         {name : "Action",field : "action",width : '10%', 
          formatter : function(item) { 
           var link = '<a href="#" title="Edit" onClick="updateUserDialog.show()"><div class="dijitIconEdit"></div></a> <a href="#" id="deleteUser" onClick="deleteUser();" title="Delete"><div class="dijitIconDelete"></div></a>'; 
           return link; 
          } 
         }]; 

       gridLayout = [ { 
        // First, our view using the _CheckBoxSelector custom type 
        type : "dojox.grid._CheckBoxSelector" 
       }, gridCell ]; 

       grid = new DataGrid({ 
        store : userDataStore12, 
        structure : gridLayout, 
        selectionMode : "single", 
        autoHeight : true 
       }, "ObjectGrid"); 
       grid.startup(); 

       on(grid, "RowClick", function showDetail(e) { 
        var gridUserId = grid.store.getValue(grid.getItem(e.rowIndex), "userid"); 
        globalUserId = gridUserId; 
       }); 
      }); 
    function deleteUser() { 

     require([ 'dojo/dom', 'dojo/request' ], function(dom, request) { 
      //request for delete user   
      request.post(appContext + "/rest/userservice/deleteUser", { 
       data : "userId=" + globalUserId, 
       timeout : 2000 
      }).then(function(response) { 
       console.log("request sent successfully!!!!!!!"); 

      }); 
     }); 

    } 
+0

Mise à jour ma réponse – MiBrock

Répondre

1

J'ai réussi à supprimer une seule ligne d'un Datagrid de cette façon. Je sélectionne une ligne via une case à cocher, puis appelle la fonction getSelectedItems() par un bouton à la fin de la grille pour supprimer la ligne sélectionnée.

function getSelectedItems(){ 
    require(["dijit/registry", "dojo/_base/array", "dojo/domReady!"], function(registry, array){ 
    var items = registry.byId("GraphGrid").selection.getSelected(); 
    if (items.length) { 
     array.forEach(items, function(selectedItem){ 
     /* Delete the item from the data store: */ 
    GraphicStore.deleteItem(selectedItem); 
     }); 
    } 
    }); 
} 

Mise à jour

Il est un peu plus tard et je ne suis pas sûr que ce problème est toujours d'actualité mais je résoudre ce problème pour moi. Mon problème était presque le même que le vôtre. J'ai une Datagrid affichée dans un ContentPane et je souhaite supprimer des lignes uniques. Le problème était qu'après avoir supprimé l'élément, la grille n'était pas actualisée. donc je recharger avec

grid.setStore(GraphicStore); 

Mais ContentPane resté vide, sauf pour les têtes de colonne. Quand je trier les lignes, la nouvelle grille apparaît. Ensuite, j'ai mis une alerte pour voir si la grille est toujours enregistrée ou pas et avec cette alerte, la grille apparaît soudainement! Pour résoudre ce problème, je configure un Timeout, afin que la grille puisse être complètement chargée (je suppose que cela a quelque chose à voir avec le chargement) et configurer le nouveau magasin. Gird apparaît - Problème résolu.

je le fais de cette façon:

setTimeout(function(){ 
    grid.setStore(GraphicStore); 
    }, 1000); 

Cordialement, Miriam

Questions connexes