如何在flex中循环datagrids行

时间:2009-10-15 11:19:42

标签: flex datagrid

我有一个 DataGrid ,其中包含带有 textinput DataGridColumn 和带有按钮的 DataGridColumn 。 DataGrid绑定到某些XML,它在文本框中显示值。 单击行的按钮时,我需要从文本框中取出值并将其保存到相关的XML节点中。

我的解决方案只是将行的id传递给按钮单击事件,然后循环遍历行,直到找到id然后只抓取文本框值。简单。

然而,我可以找到循环遍历行的唯一建议是通过底层的dataProvider,这是无稽之谈,因为两者不是同一个东西。

这甚至可能吗?还是有更好的方法?
注意除非必须,否则我不想重写标记。
感谢

2 个答案:

答案 0 :(得分:2)

您可能正在使用itemRendererDataGridColumn显示textBox(又名TextInput组件)。我建议您在TextInput itemRenderer之前发送一个自定义事件,当您准备保存值时,TextInput.dataChange事件(或其他TextInput.Event适合您)。
http://livedocs.adobe.com/flex/3/langref/mx/controls/TextInput.html

请注意,您需要在itemRenderer之外对此事件进行处理(例如,DataGrid) - itemRenderers不能很好地处理事件。
另外,保存TextInput值的按钮不是一个好主意的一个原因是因为它们都是itemRenderers,并且很难在itemRenderers之间进行通信 - 这很难,因为Adobe认为它是不干净的代码。登记/> http://www.adobe.com/devnet/flex/articles/itemrenderers_pt1.html

此外,这是另一个改变ComboBox的dataProvider的解决方案(在您的情况下,它是TextInput而不是ComboBox):
http://www.switchonthecode.com/tutorials/simple-datagrid-item-editor-in-flex

答案 1 :(得分:1)

来自listData.rowIndex

itemRenderer返回当前行索引。您可以从点击处理程序中将其读取为:

private function clickHandler(event:MouseEvent):void
{
  var listData:BaseListData = IDropInListItemRenderer(event.target).listData;
  var clickedRowIndex:Number = listData.rowIndex;
}