嵌套数据网格:将焦点设置在内部数据网格上

发布于 2024-10-06 09:42:40 字数 1448 浏览 2 评论 0原文

我有一个数据网格,其中有一列用另一个数据网格呈现。我这样做是为了实现类似行跨度的显示(在子数据网格下方有一个水平盒),在每行下方显示消息。 当我点击并到达行尾时,我希望焦点传递到下一行,即下一个子数据网格以及该行的特定单元格。 这是调用渲染器的简化代码:

<mx:DataGrid width="100%"
                 showHeaders="false"
                 selectable="false"
                 id="ParentDatagrid"
                 dataProvider="{arrayActs}"
                 paddingBottom="0" paddingTop="0"
                 variableRowHeight="true">
        <mx:columns>
            <mx:DataGridColumn itemRenderer="components.ColumnRendererDatagrid"/>
        </mx:columns>
    </mx:DataGrid>

渲染器(ColumnRendererDatagrid)代码:

<mx:DataGrid 
    id="dgLocal" width="100%" height="23" borderSides=""
    dataProvider="{data}" showHeaders="false"
    editable="true" selectable="false">
    <mx:columns>
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
    </mx:columns>
</mx:DataGrid>
<mx:HRule width="100%" />
<mx:Label id="message" text="Error Message" width="100%" />

目前,我在 ColumnRendererDatagrid 中使用以下代码片段来检查制表符何时到达行末尾并冒泡事件:

if(dgLocal.editedItemPosition.columnIndex == 13){
                dispatchEvent(new Event(MOVE_FOCUS_DOWN, true));

从那里我'我正在努力解决如何深入到渲染器以在更高的组件获取此事件后设置焦点。任何帮助将不胜感激。谢谢

I have a datagrid with a single column rendered with another datagrid. I'm doing this to implement a rowspan-like display (with a hbox beneath the child datagrid) showing messages under each row.
When I tab and reach the end of a row, I want the focus to pass to the next row i.e the next child datagrid and on a specific cell of that row.
This is the simplified code calling the renderer :

<mx:DataGrid width="100%"
                 showHeaders="false"
                 selectable="false"
                 id="ParentDatagrid"
                 dataProvider="{arrayActs}"
                 paddingBottom="0" paddingTop="0"
                 variableRowHeight="true">
        <mx:columns>
            <mx:DataGridColumn itemRenderer="components.ColumnRendererDatagrid"/>
        </mx:columns>
    </mx:DataGrid>

And the renderer (ColumnRendererDatagrid) code :

<mx:DataGrid 
    id="dgLocal" width="100%" height="23" borderSides=""
    dataProvider="{data}" showHeaders="false"
    editable="true" selectable="false">
    <mx:columns>
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
        <mx:DataGridColumn />
    </mx:columns>
</mx:DataGrid>
<mx:HRule width="100%" />
<mx:Label id="message" text="Error Message" width="100%" />

For the moment, I'm using the following snippet in ColumnRendererDatagrid to check when tabbing reaches the end of the row and bubble up the event :

if(dgLocal.editedItemPosition.columnIndex == 13){
                dispatchEvent(new Event(MOVE_FOCUS_DOWN, true));

From there I'm struggling on how to drill down into the renderer to set the focus once the higher component get this event. Any help would be really appreciated. Thx

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

缘字诀 2024-10-13 09:42:40

好的,这是我想出的解决方案。这是父事件处理程序中的代码(处理 MOVE_FOCUS_DOWN):(

//Find the postition of the item that sent the event :
for each( var row:Object in ParentDatagrid.dataProvider ) {     
                if( (event.target as ColumnRendererDatagrid).data == row) {
                    break;
                }
                i++;
            } 

//Get the renderer of the next item :
  var render:IListItemRenderer = ParentDatagrid.itemToItemRenderer(arrayActes.getItemAt(i+1));
  (render as ColumnRendererDatagrid).dgLocal.editedItemPosition = {rowIndex:0, columnIndex:1}

显然应该在实际代码中进行检查以查看下一个对象是否存在),其类型为 ColumnRendererDatagrid。从那里我只需设置焦点/编辑位置。

Ok, here is the solution I came up with. This is the code in the parent's event handler (handling the MOVE_FOCUS_DOWN):

//Find the postition of the item that sent the event :
for each( var row:Object in ParentDatagrid.dataProvider ) {     
                if( (event.target as ColumnRendererDatagrid).data == row) {
                    break;
                }
                i++;
            } 

//Get the renderer of the next item :
  var render:IListItemRenderer = ParentDatagrid.itemToItemRenderer(arrayActes.getItemAt(i+1));
  (render as ColumnRendererDatagrid).dgLocal.editedItemPosition = {rowIndex:0, columnIndex:1}

(obviously checks should be made in real code to see if the next object exists) which is of type ColumnRendererDatagrid. From there I just set the focus/editing position.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文