【问题标题】:How to close dojox.grid.DataGrid如何关闭 dojox.grid.DataGrid
【发布时间】:2023-04-09 05:58:01
【问题描述】:

我有一个从搜索事件填充的网格,我希望能够通过简单地在右上角添加一个 X 来关闭网格,类似于关闭任何浏览器或窗口的方式。我认为这就像添加 X 一样简单,根据我的喜好对其进行样式设置,然后创建一个关闭或隐藏网格的 onclick 事件......但我似乎无法让它工作。任何帮助将不胜感激。

我的 JS 是:

dojo.require("dojox.grid.DataGrid"); //FindTask
dojo.require("dojo.data.ItemFileReadStore"); //FindTask
dojo.require("esri.tasks.find"); //FindTask

var findTask, findParams;
var grid, store;
var searchExtent;

function doFind() {

            //Show datagrid onclick of search button and resize the map div.
            esri.show(datagrid);
            dojo.style(dojo.byId("content"), "height", "83%");
            searchExtent = new esri.geometry.Extent ({
            "xmin":-9196258.30121186,"ymin":3361222.57748752,"xmax":-9073959.055955742,"ymax":3442169.390441412,"spatialReference":{"wkid":102100}
            });

            map.setExtent(searchExtent);

    //Set the search text to the value in the box
    findParams.searchText = dojo.byId("parcel").value;
            grid.showMessage("Loading..."); //Shows the Loading Message until search results are returned.
    findTask.execute(findParams,showResults);
  }

  function showResults(results) {
    //This function works with an array of FindResult that the task returns
    map.graphics.clear();
    var symbol = new esri.symbol.SimpleFillSymbol(esri.symbol.SimpleFillSymbol.STYLE_SOLID, new esri.symbol.SimpleLineSymbol(esri.symbol.SimpleLineSymbol.STYLE_SOLID, new dojo.Color([98,194,204]), 2), new dojo.Color([98,194,204,0.5]));


    //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;
    }); 

    //Create data object to be used in store
    var data = {
      identifier: "Parcel Identification Number",  //This field needs to have unique values. USES THE ALIAS!!!
      label: "PARCELID", //Name field for display. Not pertinent to a grid but may be used elsewhere.
      items: items
    };

     //Create data store and bind to grid.
    store = new dojo.data.ItemFileReadStore({ data:data });
    var grid = dijit.byId('grid');
    grid.setStore(store);

    //Zoom back to the initial map extent
    map.setExtent(searchExtent);

  }

  //Zoom to the parcel when the user clicks a row
  function onRowClickHandler(evt){
    var clickedTaxLotId = grid.getItem(evt.rowIndex).PARCELID;
    var selectedTaxLot;

    dojo.forEach(map.graphics.graphics,function(graphic){
      if((graphic.attributes) && graphic.attributes.PARCELID === clickedTaxLotId){
        selectedTaxLot = graphic;
        return;
      }
    });
    var taxLotExtent = selectedTaxLot.geometry.getExtent();
    map.setExtent(taxLotExtent);
  } 

我的 HTML 是:

<div id ="datagrid" data-dojo-type="dijit.layout.AccordionPane" splitter="true" region="bottom"
        style="width:100%; height:125px;">
        <table data-dojo-type="dojox.grid.DataGrid" data-dojo-id="grid"  id="grid" data-dojo-props="rowsPerPage:'5', rowSelector:'20px'">
  <thead>
    <tr>
      <th field="Parcel Identification Number" width="10%">
                        Parcel ID
                    </th>
                    <th field="Assessing Neighbornood Code" width ="20%">
                        Neighborhood Code
                    </th>
                    <th field="Property Class Code" width="10%">
                        Property Class
                    </th>
                    <th field="Site Address" width="100%">
                        Address
                    </th>
    </tr>
  </thead>
</table>
    </div>

这是我对添加内容的最佳猜测:

                <tr>
                <td align="right">
                    <div class="divOk" onclick="dijit.byId('tocDiv').hide();">
                        OK</div>
                </td>
            </tr>

【问题讨论】:

  • 我看不到您在代码中为实现目标所做的努力。
  • 已编辑以包含我的尝试...

标签: dojo dojox.grid.datagrid


【解决方案1】:

我最终通过创建一个新列并在标题中放置一个关闭图标来解决我想要的问题。我将它连接到一个函数,这样当我单击它时,网格会关闭并且地图会调整大小:

function closeGrid() {
        esri.hide(datagrid);
        dojo.style("map", {"height": "100%"});
        }

HTML

<th field="" width="2%"> <div class="GridCloseIcon" title="Close Grid" onclick="closeGrid();"></div>

【讨论】:

    【解决方案2】:

    这个怎么样? (假设 OK 线实际出现)

    HTML

        <tr>
            <td align="right">
                <div class="divOk" onclick="hideGrid();">OK</div>
            </td>
        </tr>
    

    JS

        function hideGrid() {
            var widget = dijit.byId('datagrid');
            dojo.fadeOut({
                node: widget.domNode
            }).play();
    
            dojo.style(widget.domNode, 'display', 'none');
        }
    

    【讨论】:

    • alrigth,已经想知道它会如何。我可以告诉你,DataGrid 的声明性实例化是假的。 DataGrid 实际上是由各种 div 组成的,但不是任何表(如您所见,如果您查看已解析的源代码)。我想最简单的方法是将整个DataGrid 包裹在另一个div 中,您可以在其中放置X。根据您的用例,考虑在dijit.Dialog-widget 中显示DataGrid 也是值得的...
    猜你喜欢
    • 1970-01-01
    • 2011-11-23
    • 2010-12-02
    • 1970-01-01
    • 2012-04-07
    • 2011-10-14
    • 1970-01-01
    • 2011-07-27
    • 2011-05-22
    相关资源
    最近更新 更多