我有一个 DataGrid ,其中包含带有 textinput 的 DataGridColumn 和带有按钮的 DataGridColumn 。 DataGrid绑定到某些XML,它在文本框中显示值。 单击行的按钮时,我需要从文本框中取出值并将其保存到相关的XML节点中。
我的解决方案只是将行的id传递给按钮单击事件,然后循环遍历行,直到找到id然后只抓取文本框值。简单。
然而,我可以找到循环遍历行的唯一建议是通过底层的dataProvider,这是无稽之谈,因为两者不是同一个东西。
这甚至可能吗?还是有更好的方法?
注意除非必须,否则我不想重写标记。
感谢
答案 0 :(得分:2)
您可能正在使用itemRenderer
为DataGridColumn
显示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;
}