2009-10-01 10 views
1

J'ai une grille de données configurée, connectée à un XMLStore. Lorsque l'utilisateur sélectionne un mois dans la liste déroulante, je souhaite que la grille ne filtre que les données des mois. Devrait être simple et selon chaque exemple c'est. Je ne peux pas comprendre pourquoi cela ne fonctionne pas, ni pourquoi IE me dit qu'aucune des méthodes (filter, sort, setQuery) n'est supportée par l'objet dataGrid.Filtrage d'un DataGrid Dojo

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
    <title>Untitled Page</title> 
    <style type="text/css"> 
     @import "StyleSheet.css"; 
     @import "js/dojotoolkit/dijit/themes/pfga/pfga.css"; 
     @import "js/dojotoolkit/dojo/resources/dojo.css"; 
     @import "js/dojotoolkit/dojox/grid/resources/pfgaGrid.css"; 
    </style> 

    <script src="js/dojotoolkit/dojo/dojo.js" type="text/javascript" djConfig="parseOnLoad: true"></script> 

    <script type="text/javascript"> 
     dojo.require("dojo.parser"); 
     dojo.require("dojox.grid.DataGrid"); 
     dojo.require("dojox.data.XmlStore"); 
     dojo.require("dijit.layout.ContentPane"); 
     dojo.require("dijit.form.FilteringSelect"); 
     dojo.require("dojo.data.ItemFileReadStore"); 

     theMonth = new Date(); 

     var month_name=new Array(12); 
     month_name[0]="January" 
     month_name[1]="February" 
     month_name[2]="March" 
     month_name[3]="April" 
     month_name[4]="May" 
     month_name[5]="June" 
     month_name[6]="July" 
     month_name[7]="August" 
     month_name[8]="September" 
     month_name[9]="October" 
     month_name[10]="November" 
     month_name[11]="December" 

     dojo.addOnLoad(function(){dojo.byId('monthInput').value=month_name[theMonth.getMonth()]}); 

     var eventStore = new dojox.data.XmlStore({url: "events.xml", rootItem: "event", keyAttribute: "dateSort"}); 

     function monthClick() { 
      var ctr, test, rtrn, grid; 

      test = dojo.byId('monthInput').value; 

      for (ctr=0;ctr<=11;ctr++) 
      { 
       if (test==month_name[ctr]) 
       { 
        rtrn = ctr +1; 
       } 
      } 
      eventGrid.filter({month:rtrn}); 
     } 
    </script> 
</head> 
<body class="pfga"> 
    <div id="content" style="width:800px; overflow:visible" dojoType="dijit.layout.ContentPane" region="center" class="pfga"> 
     <div dojotype="dojo.data.ItemFileReadStore" url="months.json" jsID="monthStore"></div> 
     <div id="pagehead" class="Heading1" >Upcoming Range Events - PF&amp;GA</div> 
     <p> 
     <input dojoType="dijit.form.FilteringSelect" store="monthStore" searchAttr="month" name="id" id="monthInput" class="pfga" onChange="monthClick()" /> 
     </p> 
     <table dojoType="dojox.grid.DataGrid" store="eventStore" query="{month:'5'}" class="pfga" style="height:500px" clientSort="false" id="eventGrid" > 
      <thead> 
      <tr> 
       <th field="dateSort" hidden="true">DateSort</th> 
       <th field="date" width="80px">Date</th> 
       <th field="description" width="600">Description</th> 
      </tr> 
      <tr> 
       <th field="time" colspan="3">Details</th> 
      </tr> 
      </thead> 
     </table> 
    </div> 
</body> 
</html> 

En complément de cela, alors que l'événement click fonctionne parfaitement, lorsque je tente d'appliquer le filtre sur le chargement de cette page, lorsque la grille est d'abord chargé, il ne filtre pas la grille. J'ai tenté d'ajouter unOnLoad à un filtre, de l'ajouter à la fonction addOnLoad existante que j'ai créée ci-dessus et j'ai même essayé de remplacer la valeur de ma liste déroulante par la requête de démarrage de ma grille au moment du chargement .

Répondre

2

Vous pouvez rendre votre réseau accessible à partir de la portée globale en mettant l'attribut jsId (jsId = « eventGrid »), ou vous pouvez le trouver par id:

dijit.byId("eventGrid").filter({month:rtrn}); 
0

Je pense que vous voulez id = « eventGrid » pour lire jsId = « eventGrid » ou ajouter un autre attribut pour jsId = « eventGrid »

+0

J'ai reçu la réponse du groupe de diffusion-dojo intérêt et tenté de publier hier soir mais le site semble être en panne. Merci aux deux qui ont répondu –