2

我有 flex advancedDataGrid(如果效果更好,可以使用 dataGrid,尽管我喜欢我的元列标题),并且我希望在选定行的顶部弹出一个组件。

问题是,我可以弄清楚如何引用数据网格的实际渲染行(而不是数据提供者的项目),以便获得它在屏幕上的位置。

有没有人对如何访问数据网格的“行”有任何理论,或者至少获得它的位置?

干杯

4

3 回答 3

1

我们最终在引用父文档的 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>

于 2010-04-17T00:04:35.027 回答
1

我在 dataGridColumn 中使用了 width 属性,只需将宽度相加即可获得 x 位置,但问题是当您现在使用 lockColumnCount 时,我的程序无法正确计算 x。

于 2011-10-14T17:00:41.483 回答
0

获取数据网格的 x、y 位置的简单方法是将数据网格包装在画布内并尝试捕获画布的 mouseX 和 mouseY。如有必要,您可以使用 localToGlobal 方法。

于 2010-03-08T18:06:10.140 回答