1

我有一列在我的 dojox.data.datagrid 中没有检索到任何数据,但是我放置了一个自定义的可点击标题。我想禁用此列的排序,以便在我尝试单击标题时不会出现三角形。

有什么想法可以实现这一目标吗?

编辑以显示我的代码:

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.
            dojo.style("map", {
                    "height": "87%"});
            esri.show(datagrid);
            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:

<!--Data Grid-->
                            <div id="datagrid" dojotype="dijit.layout.ContentPane" region="bottom" splitter="true" 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="57%">
                        Address
                                                </th>
                                                <th field="" width="2%"> <div class="GridCloseIcon" title="Close Grid" onclick="closeGrid();"></div>
                                                </th>                   
                                            </tr>
                                        </thead>
                                    </table>
                            </div>
4

2 回答 2

2

覆盖 datagrid 实例的 canSort 方法,并为给定的“col”参数返回 true 或 false。请参阅DataGrid 文档的这一部分中的“canSort” 。

如果例如第三列不应该是可排序的,请使用以下内容:

myGrid = new DataGrid({
    ....
    canSort: function(col) {
        return !(Math.abs(col) === 3);
    },
    ....
}, yourGridElemId);

在您的代码中,尝试类似:

dojo.addOnLoad(setupGrid);

function setupGrid() {
    var grid = dijit.byId('grid');
    grid.canSort = function(col) {
        return !(Math.abs(col) === 3);
    }
}
于 2013-01-17T15:35:09.740 回答
0

在创建 DataGrid 对象时,设置 'canSort : false' 如下。

grid = new DataGrid({
                canSort: false,

            }, "gridId");
于 2018-11-16T14:04:05.057 回答