如何刷新数据网格以显示新值?

时间:2016-08-21 14:48:06

标签: datagrid dojo

我开发了一个Web GIS工具,使用ArcGIS javascript api的Find任务在地图上查找某些功能,并使用dojo的网格增强功能在网格中显示该属性。第一次一切正常。我可以在网格中找到使用关键字和显示属性的功能,但是当我再次使用查找工具时,我只能在地图上显示功能,并且第一次使用后网格不会刷新。如何刷新并在网格中显示新值? geonet有一个像我的代码一样的代码示例。我在stackoverflow中搜索并找到how-to-refresh-datagrid,但我无法使用解决方案。



define([
    "esri/tasks/FindTask",
    "esri/tasks/FindParameters",
    "esri/symbols/SimpleLineSymbol",
    "esri/symbols/SimpleFillSymbol",
    "esri/Color",

    "dgrid/Grid",
    "dgrid/Selection",
    'dojo/_base/declare',
    "dojo/on",
    "dojo/dom",
    "dijit/registry",
    "dojo/_base/array",
    "dijit/form/Button",
    "dojo/parser",
    "esri/symbols/SimpleMarkerSymbol","dojo/data/ItemFileReadStore","dojox/grid/EnhancedGrid","dojo/data/ItemFileWriteStore",
    "dojox/grid/enhanced/plugins/Pagination","dojox/grid/enhanced/plugins/Selector","dojox/grid/enhanced/plugins/Filter","dojox/grid/enhanced/plugins/exporter/CSVWriter","dojo/io/iframe",
    "dojo/domReady!"],function ( FindTask, FindParameters, SimpleLineSymbol, SimpleFillSymbol, Color,
                                Grid, Selection, declare, on, dom, registry, arrayUtils, Button, parser,SimpleMarkerSymbol,ItemFileReadStore,EnhancedGrid,ItemFileWriteStore) {
        return{

            Find: function (map) {

                var findTask, findParams;

                var grid, store;




                parser.parse();

                registry.byId("searchfind").on("click", doFind);

                //Create Find Task using the URL of the map service to search
                findTask = new FindTask("http://...:6080/arcgis/rest/services/layers2/MapServer/");

                map.on("load", function () {
                    //Create the find parameters
                    findParams = new FindParameters();
                    findParams.returnGeometry = true;
                    findParams.layerIds = [0];
                    findParams.searchFields = ["Name"];
                    findParams.outSpatialReference = map.spatialReference;
                    console.log("find sr: ", findParams.outSpatialReference);
                });

                function doFind() {
                    //Set the search text to the value in the box
                    var ownerNameBox = dom.byId("findName");
                    findParams.searchText = dom.byId("findName").value;
                    findTask.execute(findParams, showResults);
                }
                function showFilterBar(){
                    dijit.byId('grid').showFilterBar(true);
                }

                function showResults(results) {

                    //This function works with an array of FindResult that the task returns
                    map.graphics.clear();
                    var symbol = new SimpleMarkerSymbol();
                    symbol.setColor(new Color([0,255,255]));

                    //create array of attributes
                    var items = dojo.map(results, function (result) {
                        var graphic = result.feature;
                        graphic.setSymbol(symbol);
                        map.graphics.add(graphic);
                        return result.feature.attributes;
                    });
                    var data = {
                        identifier: 'OBJECTID',
                        label:'OBJECID',
                        items: items
                    };



                   
                     store = new dojo.data.ItemFileReadStore({data: data});

                    /*set up layout*/
                    var layout = [[
                        {'name': 'OBJECTID', 'field': 'OBJECTID', 'width':'9em',datatype:"number"},
                        {'name': 'Name', 'field': 'Name','width':'16em',datatype:"string",autocomplete:true},
                        {'name':'Address','field':'Address','width':'18em',datatype:"string",autocomplete:true}

                    ]];

                    /*create a new grid:*/
                    var grid = new dojox.grid.EnhancedGrid({

                            id: 'grid',
                            store:store,
                            structure: layout, rowSelector: '1px',
                            plugins: {
                                // pagination: {
                                //     pageSizes: ["5", "10", "All"],
                                //     description: true,
                                //     sizeSwitch: false,
                                //     pageStepper: true,
                                //     gotoButton: true,
                                //     /*page step to be displayed*/
                                //     maxPageStep: 3,
                                //     /*position of the pagination bar*/
                                //     position: "bottom"
                                // },
                                filter: {
                                    // Show the closeFilterbarButton at the filter bar
                                    closeFilterbarButton: true
                                    // Set the maximum rule count to 5
                                    // ruleCount: 5,
                                    // Set the name of the items
                                    // itemsName: "songs",

                                }

                            }

                            },

                        document.createElement('div'));

                    /*append the new grid to the div*/

                    dojo.byId("grid").appendChild(grid.domNode);



                    /*Call startup() to render the grid*/

                    grid.startup();
                    grid.setStore(store);
                    grid.refresh()





                }
                //Zoom to the parcel when the user clicks a row




                    //display the results in the grid



                    //Zoom back to the initial map extent
                    // map.centerAndZoom(center, zoom);


                // //Zoom to the parcel when the user clicks a row
                function onRowClickHandler(evt) {
                    var clickedTaxLotId = event.rows[0].data.BRTID;
                    var selectedTaxLot = arrayUtils.filter(map.graphics.graphics, function (graphic) {
                        return ((graphic.attributes) && graphic.attributes.BRTID === clickedTaxLotId);
                    });
                    if ( selectedTaxLot.length ) {
                        map.setExtent(selectedTaxLot[0].geometry.getExtent(), true);
                    }
                }

            }


        }



    }


)

<body  class="claro" role="main">
<div id="appLayout"  style="width:100%; height:100%;" >
        </div>
    <!--<div id="rightpane">-->
    <!--</div>-->
    <div id="center">
      <!-->
some divs
<!-->
</div>
          <div id="bottom" style="height: 330px" >

    </button>

        <div id="grid" style="height:98%;font-size: 14px" ></div>
</div>

</body>
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:0)

要更改网格中的更改值,您需要更改网格存储中的值。 dojo网格小部件将根据需要自行更新,因为它直接被您的商店所喜欢。