悠悠楠杉
Flex动态生成可编辑的DataGrid具体实现代码,flex datagrid
首先,你需要在Flex应用程序的MXML文件中定义DataGrid,并为其配置适当的列和编辑器。
```xml
<![CDATA[
import mx.controls.Alert;
import mx.collections.ArrayCollection;
import mx.controls.dataGridClasses.GridItemRenderer;
import mx.controls.TextArea;
import mx.controls.TextInput;
import mx.binding.utils.BindingUtils;
import mx.messaging.messages.ArrayAssignmentMessage;
import spark.components.supportClasses.GroupBase;
import spark.components.gridClasses.GridColumn;
import spark.components.gridClasses.GridRow;
import spark.components.gridClasses.Grid;
private var data:ArrayCollection = new ArrayCollection([
{ title: "示例标题1", keywords: "关键词1,关键词2", description: "描述内容1", content: "这里是正文内容1..." },
{ title: "示例标题2", keywords: "关键词3", description: "描述内容2", content: "这里是正文内容2..." }
]);
private function initData():void {
// 初始化数据到DataGrid
myDataGrid.dataProvider = data;
updateEditControls();
}
private function updateEditControls():void {
// 更新编辑器控件与数据同步
for each (var item:Object in data) {
if (item is GroupBase) { // 例如,对于基于GroupBase的项(如自定义行),需特殊处理
var editor = item["editor"] as TextArea; // 假设是TextArea类型编辑器
editor.text = item["content"]; // 更新TextArea的文本内容
} else {
item["content"] = BindingUtils.getFormattedValue(item, "content"); // 更新简单项的绑定值
}
}
}
]]>
</mx:Script>
<mx:DataGrid id="myDataGrid" width="400" height="300">
<mx:columns>
<mx:DataGridColumn headerText="标题" dataField="title" editable="true">
<mx:itemEditor>
<mx:Component>
<mx:TextInput text="{data}" commit="{updateEditControls()}"/> <!-- 使用TextInput作为编辑器 -->
</mx:Component>
</mx:itemEditor>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="关键词" dataField="keywords" editable="true">
<mx:itemEditor>
<mx:TextInput text="{data}" commit="{updateEditControls()}"/> <!-- 使用TextInput作为编辑器 -->
</mx:itemEditor>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="描述" dataField="description" editable="true">
<mx:itemRenderer> <!-- 使用自定义渲染器处理多行文本 -->
<mx:Component>
<mx:TextArea text="{data}" commit="{updateEditControls()}"/> <!-- 使用TextArea作为编辑器 -->
</mx:Component>
</mx:itemRenderer>
</mx:DataGridColumn>
<mx:DataGridColumn headerText="正文" dataField="content" editable="true"> <!-- 正文内容较长,使用TextArea -->
<mx:itemEditor>
<mx:TextArea text="{data}" commit="{updateEditControls()}"/> <!-- 同样使用TextArea -->
</mx:itemEditor>
</mx:DataGridColumn>
</mx:columns>
</mx:DataGrid>
复制代码