我有 flex advancedDataGrid(如果效果更好,可以使用 dataGrid,尽管我喜欢我的元列标题),并且我希望在选定行的顶部弹出一个组件。
问题是,我可以弄清楚如何引用数据网格的实际渲染行(而不是数据提供者的项目),以便获得它在屏幕上的位置。
有没有人对如何访问数据网格的“行”有任何理论,或者至少获得它的位置?
干杯
我有 flex advancedDataGrid(如果效果更好,可以使用 dataGrid,尽管我喜欢我的元列标题),并且我希望在选定行的顶部弹出一个组件。
问题是,我可以弄清楚如何引用数据网格的实际渲染行(而不是数据提供者的项目),以便获得它在屏幕上的位置。
有没有人对如何访问数据网格的“行”有任何理论,或者至少获得它的位置?
干杯
我们最终在引用父文档的 itemrender 中执行此操作。基本上,当单击时,项目渲染器将调用父级中的一个函数,并对其自身进行引用。
那时我们的父文档知道选择了哪个单元格,我们做了一些操作来确定它的 x,y 坐标:
public function showPopup(selectedItemRenderer:UIComponent):void {
selectedCell = selectedItemRenderer;
PopUpManager.removePopUp(editPopup);
editPopup.height = dg.rowHeight;
BindingUtils.bindProperty(editPopup, "width", dg, "width");
editPopup.setStyle("backgroundColor", 0xFF0000);
if(selectedCell != null) {
editPopup.x = selectedCell.localToGlobal(new Point(0,0)).x - 1;
editPopup.y = selectedCell.localToGlobal(new Point(0,0)).y - 1;
}
PopUpManager.addPopUp(editPopup, DisplayObject(Application.application));
}
<mx:DataGrid id="dg" width="500" height="100%"
dataProvider="{dummyData2}">
<mx:columns>
<mx:DataGridColumn
width="60">
<mx:itemRenderer>
<mx:Component>
<mx:HBox>
<mx:Button label="edit" click="{parentDocument.showPopup(this)}" />
</mx:HBox>
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn
dataField="Category">
</mx:DataGridColumn>
</mx:columns>
我在 dataGridColumn 中使用了 width 属性,只需将宽度相加即可获得 x 位置,但问题是当您现在使用 lockColumnCount 时,我的程序无法正确计算 x。
获取数据网格的 x、y 位置的简单方法是将数据网格包装在画布内并尝试捕获画布的 mouseX 和 mouseY。如有必要,您可以使用 localToGlobal 方法。