0

我的 mxml 文件中有一个数据网格,例如 samp.mxml。

<mx:DataGrid id="taskDataGrid" dataProvider="{initDG}" variableRowHeight="true" 
    editable="true" width="100%"  paddingBottom="1" paddingTop="1" height="55" > 

<mx:columns>

      <mx:DataGridColumn dataField="Select" 
                editable="true" 
                rendererIsEditor="true" 
                itemRenderer="mx.controls.CheckBox" 
                editorDataField="selected" />

      <mx:DataGridColumn dataField="TaskName"
                width="220"
                editable="true" 
                rendererIsEditor="true" 
                itemRenderer="components.taskComponent"/> //i call the component.

      <mx:DataGridColumn dataField="TaskId"
                itemRenderer="mx.controls.TextInput" />     

 </mx:columns>
 </mx:DataGrid>

在数据网格的其中一列中,我必须显示一个文本输入框和一个按钮。所以我把这个功能写成一个单独的组件,即 taskComponent.mxml

 <mx:TextInput id="TaskName"
    editable="true" 
    text="{data.TaskName}" 
    mouseDown="addTaskRow(event);"    
   /> 

 <mx:Button id="searchTask" label="..." width="30" height="25" click="showPopUp();"/>

现在,如果我单击组件中的文本输入框,我希望添加另一个数据行。早些时候我有它,如果我点击数据网格,就会添加一行。所以我在 samp.mxml 本身中编写了函数。这是添加数据网格行的功能。

private function addTaskRow(event:MouseEvent):void
        {
            taskDataGrid.dataProvider.addItem(
                {

                }
            );
            taskDataGrid.height += 30; 

        }

如果我尝试在 taskComponent 文件中编写函数,它会显示错误“未定义属性 taskDataGrid 的访问”。如何在 taskComponent 中使用数据网格?

4

3 回答 3

1

添加trace(this.owner);到文本输入的 mouseDown 并查看它跟踪的内容。如果它跟踪类似 [object DataGrid] 的东西,您可以使用它DataGrid(this.owner)来访问 taskDataGrid。

于 2009-10-09T05:06:29.583 回答
0

你不想那样做。据推测,框和按钮添加了一个新任务。您想要做的是在 initDG 变量中添加一个新行。它应该是一个 ArrayCollection。然后,添加后,网格将刷新以显示新数据。

您不希望您的 UI 成为数据。您希望它反映数据。专注于修改数据模型并简单地让网格反映它。您可能需要更深入地研究 Flex。专注于了解有关 DataGrid、dataProvider 以及绑定如何与 ArrayCollections 一起工作的更多信息。

于 2009-10-09T15:02:24.350 回答
0

查看 Peter Ent 关于项目渲染器的文章。它提供了非常丰富的信息,并让您了解一些最佳实践。我已经多次提到这个,我发现他说的很多东西非常有用......

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

本文特别向您展示了如何使用 ListData 访问父组件 - 正确的方法:

http://www.adobe.com/devnet/flex/articles/itemrenderers_pt3_02.html

ListData 是访问父级的关键。另一种选择是从渲染器调度自定义事件。

于 2009-10-09T19:33:06.957 回答