2

我有一个包含项目的 DataGrid。当您右键单击其中一行时,会显示一个 Dojo 上下文菜单,其中包含删除该行的选项。如果您尝试右键单击 DataGrid 的空白区域,则不会显示上下文菜单....但是,如果您首先右键单击一行,然后单击取消菜单选项(什么都不做),或者如果您左键单击页面上的其他位置(隐藏上下文菜单)并右键单击 DataGrid 的空白区域,显示上下文菜单,如果您单击上下文菜单中的删除项目选项,它会删除您右键单击的最后一个项目。

为什么当您右键单击 DataGrid 的空白区域时才显示上下文菜单,但仅在您已经右键单击 DataGrid 中的某个项目之后才显示?

任何提示将不胜感激。到目前为止,这是我的代码:

var selectedItem;  // This has to be declared "globally" outside of any functions

function onRowContextMenuFunc(e) {
    grid5_rowMenu.bindDomNode(e.grid.domNode);
    selectedItem = e.grid.getItem(e.rowIndex);
}

function gridRowContextMenu_onClick(e) {
    store3.deleteItem(selectedItem);
}

.

<div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;">
    <div dojoType="dijit.MenuItem" onClick="gridRowContextMenu_onClick">Delete</div>
    <div dojoType="dijit.MenuItem">Cancel</div>
</div>

.

<div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenuFunc"></div>
4

2 回答 2

3

好吧,我不完全确定为什么它只在第一次右键单击一个项目后才允许在空白区域中右键单击时显示上下文菜单,但我确实想出了一个解决我的根本问题的方法:右键单击数据网格中的行项,然后单击关闭以隐藏上下文菜单,然后右键单击数据网格的空白区域并选择菜单项会导致传递第一次右键单击的 rowIndex

这是我的代码;我希望这对以后遇到同样问题的人有所帮助:

 var selectedItem;

 function onRowContextMenu(e) {
      grid5_rowMenu.bindDomNode(e.grid.domNode);
      selectedItem = e.grid.getItem(e.rowIndex);
 }

 function gridRowContextMenuExecute(task) {
      if((task == "remove") && (selectedItem != null)) {
           store3.deleteItem(selectedItem);
      }
      else {
           selectedItem = null;
      }
 }

.

 <div dojoType="dijit.Menu" id="grid5_rowMenu" jsId="grid5_rowMenu" style="display: none;" onBlur="gridRowContextMenuExecute('cancel')">
      <div dojoType="dijit.MenuItem" onMouseDown="gridRowContextMenuExecute('remove')">Remove from Transaction</div>
      <div dojoType="dijit.MenuItem">Cancel</div>
 </div>

.

 <div id="grid" dojoType="dojox.grid.DataGrid" jsId="grid5" store="store3" structure="layoutStructure" rowsPerPage="40" onRowContextMenu="onRowContextMenu"></div>
于 2011-11-21T17:43:53.553 回答
0

grid5_rowMenu是一个菜单。

e.grid.domNode是数据网格的 DOM 节点。

*grid5_rowMenu.bindDomNode(e.grid.domNode);*

它是:将上下文菜单提供给网格(DOM 节点内的任何位置)。

因为datagrid中的内容总是变化的,所以将菜单分配给grid里面的元素并不容易。

如果你的网格没有改变它的内容,你可以这样做:*grid5_rowMenu.bindDomNode(e.target.parentElement);*

于 2014-01-10T22:35:51.743 回答