Flex中,读入CSV文件(包括列标题),然后根据CSV文件的内容来设置Datagrid,方法如下:
1、声明变量
/** CSV文件读入用的对象 */
private var myFileReference:FileReference = new FileReference();
[Bindable]
private var arrDgData : ArrayCollection = new ArrayCollection(); // DataGrid的DataProvider
// DataGrid控件
<mx:DataGrid id="dgData" dataProvider="{dgDataCollection}" height="100%" width="100%" verticalGridLines="true"
dropEnabled="false" sortableColumns="false" allowMultipleSelection="true" horizontalGridLines="true"
dragMoveEnabled="false" draggableColumns="false">
2、用myFileReference打开要读入的CSV文件,经过Server端Java程序(Remote)处理后,返回一个List。
3、接下来用如下的方法对返回的List进行操作,即可生成一个带列标题的DataGrid
private var csvInfoList : ArrayCollection;
private function afterLocalOutput(event : ResultEvent):void {
circlePackEntRemote.removeWaiting();
csvInfoList = ArrayCollection(event.result);
if (csvInfoList == null || csvInfoList.length == 0) {
return;
}
arrDgData.removeAll();
var arrRecord : Array;
var allColumns : Array = new Array();
arrRecord = csvInfoList.getItemAt(0) as Array;
var i : int;
// 生成各个列
for (i = 0; i < arrRecord.length; i++) {
var colEx:DataGridColumnEx = new DataGridColumnEx();
colEx.headerText = arrRecord[i];
colEx.sortable = false;
colEx.width = 70;
// 设置各个列的dataField
colEx.dataField = "msItem" + i;
colEx.setStyle("textAlign","left");
allColumns.push(colEx);
}
dgData.columns = allColumns;
// 循环,DataGrid的DataProvider做成
for (i = 1; i < csvInfoList.length; i++) {
arrRecord = csvInfoList.getItemAt(i) as Array;
var objTemp : Object = new Object();
for (var j : int = 0; j < arrRecord.length; j++) {
// 这句很重要,对应上面列做成时的dataField
objTemp["msItem" + j] = arrRecord[j];
}
arrDgData.addItem(objTemp);
}
dgData.dataProvider = arrDgData;
}