我必须填充具有以下字段的高级数据网格:
大陆-州-社会-实际值-估计值
我想模拟一个金融市场,所以我必须通过来自httpservice的异步请求更改一些值;您有什么想法这样做吗?
谢谢您。
如有必要,我将发布.as文件,但它是由flex builder自动生成的。
以下是客户端flex/air应用程序的代码:
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
pageTitle="prova"
creationComplete="initApp()" backgroundGradientColors="[#ffffff, #ffffff]">
<mx:ViewStack id="applicationScreens" width="100%" height="100%">
<mx:Canvas id="view" width="100%" height="100%">
<mx:AdvancedDataGrid id="dataGrid" initialize="gc.refresh();"
borderColor="#000000"
selectionMode="singleRow"
rowCount="8"
editable="false"
lockedColumnCount="1"
right="10" left="10" top="10" bottom="71" itemClick="adg_itemClick(event);">
<mx:dataProvider>
<mx:GroupingCollection id="gc" source="{dataArr}">
<mx:grouping>
<mx:Grouping>
<mx:GroupingField name="continenteCol">
<mx:summaries>
<mx:SummaryRow summaryPlacement="group">
<mx:fields>
<mx:SummaryField dataField="actualCol"
operation="SUM"/>
<mx:SummaryField dataField="estimateCol"
operation="SUM"/>
</mx:fields>
</mx:SummaryRow>
</mx:summaries>
</mx:GroupingField>
<mx:GroupingField name="statoCol">
<mx:SummaryRow summaryPlacement="group">
<mx:fields>
<mx:SummaryField dataField="actualCol"
operation="SUM" />
<mx:SummaryField dataField="estimateCol"
operation="SUM"/>
</mx:fields>
</mx:SummaryRow>
</mx:GroupingField>
</mx:Grouping>
</mx:grouping>
</mx:GroupingCollection>
</mx:dataProvider>
<mx:columns>
<mx:AdvancedDataGridColumn resizable="false" headerText="continente" dataField="continenteCol" />
<mx:AdvancedDataGridColumn headerText="stato" dataField="statoCol" />
<mx:AdvancedDataGridColumn headerText="societa" dataField="societaCol" />
<mx:AdvancedDataGridColumn headerText="actual" dataField="actualCol" />
<mx:AdvancedDataGridColumn headerText="estimate" dataField="estimateCol" />
</mx:columns>
</mx:AdvancedDataGrid>
<mx:Button id="btnAddNew" click="goToUpdate()" icon="@Embed('icons/AddRecord.png')" toolTip="Add Record" x="10" bottom="10"/>
<mx:Button id="btnDelete" click="deleteItem()" icon="@Embed('icons/DeleteRecord.png')" toolTip="Delete Record" x="58" bottom="10"/>
<mx:Label text="Search by continente" right="300" bottom="11"/>
<mx:TextInput id="filterTxt" width="238" toolTip="Search by continente" enter="filterResults()" right="58" bottom="11"/>
<mx:Button click="filterResults()" id="filterButton" icon="@Embed('icons/SearchRecord.png')" toolTip="Search by continente" right="10" bottom="10"/>
</mx:Canvas>
<mx:Canvas id="update" width="100%" height="100%">
<mx:Form width="100%" height="80%" id="provaForm">
<mx:FormItem label="Continente:" id="continente_form">
<mx:TextInput id="continenteCol" text=""/>
</mx:FormItem>
<mx:FormItem label="Stato:" id="stato_form">
<mx:TextInput id="statoCol" text=""/>
</mx:FormItem>
<mx:FormItem label="Societa:" id="societa_form">
<mx:TextInput id="societaCol" text=""/>
</mx:FormItem>
<mx:FormItem label="Actual:" id="actual_form">
<mx:TextInput id="actualCol" text=""/>
</mx:FormItem>
<mx:FormItem label="Estimate:" id="estimate_form">
<mx:TextInput id="estimateCol" text=""/>
</mx:FormItem>
</mx:Form>
<mx:Button label="Save" id="btnSubmit" click="insertItem()" right="81" bottom="10"/>
<mx:Button label="Cancel" id="btnCancel" click="goToView()" right="10" bottom="10"/>
</mx:Canvas>
</mx:ViewStack>
这是.as文件..
/**
*ActionScript源文件,用于定义UI逻辑和一些数据访问代码。
*此文件使用mx:script标记链接到主应用程序mxml文件。
*此文件中的大多数函数由中定义的事件处理程序调用。
* MXML。
/
导入flash.events。
;
导入mx.collections.arraycollection;
导入mx.controls.advancedDataGrid;
导入mx.controls.alert;
导入mx.controls.advancedDataGridClasses.advancedDataGridColumn;
导入mx.events.*;
导入mx.managers.cursormanager;
导入mx.rpc.asyncToken;
导入mx.rpc.events.faultevent;
导入mx.rpc.events.resulteevent;
导入mx.rpc.http.httpservice;
//包含服务器终结点URL的常量定义
包括“provaconfig.as”;
/**
*网关:这是与服务器端PHP代码的通信层
*/
私有var网关:httpService=new httpService();
/**
*数组集合包含我们在网格中使用的行
*/
[可绑定]
public var dataarr:arraycollection=new arraycollection();
/**
*我们订购的列。每次用户单击
*网格列标题。
*请参见
*MXML文件
*/
private var ordercolumn:数字;
/**
*数据库表中的字段列表
*需要将响应解析为哈希
*/
private var字段:object='continente':string,'stato':string,'societa':string,'actual':number,'estimate':number
/**
*在MXML加载完成时执行。初始化REST网关。
*/
private函数initapp():void
{
gateway.url = ENDPOINT_URL;
gateway.method = "POST";
gateway.useProxy = false;
gateway.resultFormat = "e4x";
dataGrid.addEventListener(AdvancedDataGridEvent.ITEM_EDIT_BEGINNING, editCellHandler);
dataGrid.addEventListener(AdvancedDataGridEvent.ITEM_EDIT_END, editCellEnd);
gateway.addEventListener(ResultEvent.RESULT, resultHandler);
gateway.addEventListener(FaultEvent.FAULT, faultHandler);
fill();
}
/**
*不允许编辑主键列。
*@param e dataGridEvent包含有关网格的行和列的详细信息
*用户单击的位置
*/
私有函数EditCellHandler(E:AdvancedDataGridEvent):void
{
/**
*如果用户单击了主键列,则停止编辑
*/
if(e.datafield==“可控技术醇”)
{
e.preventDefault();
返回;
}
}
/**
*单击“过滤器”按钮的处理程序。
*设置另一个筛选器时,刷新集合并加载新数据
*/
private函数filterresults():void
{
填充();
}
/**
*当用户完成编辑条目时触发的事件处理程序
*触发“更新”服务器命令
*/
私有函数EditCellEnd(E:AdvancedDataGridEvent):void
{
var dsrowindex:int=e.rowindex;
var dsfieldname:string=e.datafield;
var dscolumnindex:number=e.columnindex;
var vo:* = dataArr[dsRowIndex];
var col:AdvancedDataGridColumn = dataGrid.columns[dsColumnIndex];
var newvalue:String = dataGrid.itemEditorInstance[col.editorDataField];
trace("a:" + dsRowIndex + ", " + dsFieldName + ", " + dsColumnIndex);
var parameters:* =
{
"continente": vo.continenteCol, "stato": vo.statoCol, "societa": vo.societaCol, "actual": vo.actualCol, "estimate": vo.estimateCol }
parameters[dsFieldName.substr(0,dsFieldName.length-3)] = newvalue;
doRequest("Update", parameters, saveItemHandler);
}
/**
*“update”服务器命令的结果处理程序。
*只需提醒错误,或者在正常情况下不执行任何操作-数据已经
*已在网格中更新
*/
私有函数saveitemhandler(e:object):void
{
如果(E错误)
{
alert.show(“错误:”+e.data.error);
}
其他的
{
}
}
/**
*数据报的DragHeader处理程序。当用户
*单击数据报中的标题列
*更新全局ordercolumn变量,刷新tablecollection
*@关于列的参数事件DataGridEvent详细信息
*/
private函数setorder(event:advancedDataGridEvent):void
{
orderColumn=event.columnIndex;
var col:advancedDataGridColumn=datagrid.columns[orderColumn];
col.sortscending=!列排序降序;
event.preventDefault();
fill();
}
/**
*单击“添加”状态下的“保存”按钮的处理程序
*收集表单中的信息并向集合中添加新对象
/
private函数insertitem():void{
变量参数:
=
{
“method”:“insert”,“continente”:continentecol.text,“stato”:statocol.text,“societa”:societacol.text,“actual”:actuallcol.text,“estimate”:estimatecol.text;
/**
* execute the server "insert" command
*/
doRequest("Insert", parameters, insertItemHandler);
}
/**
*insert调用的结果处理程序。
*如果错误存在,则发出警报
*如果调用通过OK,则返回列表并刷新数据
*/
私有函数insertitemhandler(e:object):void
{
如果(E错误)
{
alert.show(“错误:”+e.data.error);
}
其他的
{
GotoVIEW();
填充();
}
}
/**
*用于刷新数据的通用功能
*获取筛选和排序,然后发送新的服务器调用
*
*/
私有函数fill():void
{
/**
*查找订单参数
*/
var desc:boolean=false;
var orderfield:string='';
if(!isNaN(orderColumn))
{
var col:AdvancedDataGridColumn = dataGrid.columns[orderColumn];
desc = col.sortDescending;
orderField = col.dataField.substr(0,col.dataField.length-3);
}
dataGrid.enabled = false;
CursorManager.setBusyCursor();
var parameters:* =
{
"orderField": orderField,
"orderDirection": (desc) ? "DESC" : "ASC",
"filter": filterTxt.text
}
doRequest("FindAll", parameters, fillHandler);
}
/**
*填充调用的结果处理程序。
*如果是一个错误,请向用户显示它,否则请用新数据重新填充arraycollection。
*
/
私有函数FillHandler(e:Object):void
{
如果(E错误)
{
alert.show(“错误:”+e.data.error);
}
其他的
{
dataarr.removeall();
对于每个(var行:e.data.row中的xml)
{
变量:
= {};
for(var键:字段中的字符串)
{
temp[key+'col']=行[key];
}
dataArr.addItem(temp);
}
CursorManager.removeBusyCursor();
dataGrid.enabled = true;
}
}
/**
*单击列表中“删除”按钮的处理程序
*确认操作并启动DeleteClickHandler函数
*/
私有函数deleteItem():void{
if (dataGrid.selectedItem)
{
Alert.show("Are you sure you want to delete the selected record?",
"Confirm Delete", 3, this, deleteClickHandler);
}
}
/**
*确认对话框的事件处理程序函数在
*按下删除按钮。
*如果按下的按钮是“是”,则产品将被删除。
*@参数对象事件
*@什么也不返回
/
私有函数DeleteClickHandler(事件:CloseEvent):void
{
如果(event.detail==alert.yes)
{
VaVO:
=datagrid.selecteditem;
var parameters:* =
{
"continente": vo.continenteCol
}
doRequest("Delete", parameters, deleteHandler);
setTimeout( function():void
{
dataGrid.destroyItemEditor();
},
1);
}
}
公共函数DeleteHandler(e:*):void
{
如果(E错误)
{
alert.show(“错误:”+e.data.error);
}
其他的
{
var continente:number=parseInt(e.data.toString(),10);
for(var index:number=0;index<dataarr.length;index++)
{
if(dataarr[index].continentecol==continente)
{
dataarr.removeitemat(索引);
断裂;
}
}
}
}
/**
*反序列化XML响应
*处理错误案例
*
*@param e resultEvent服务器响应和有关连接的详细信息
/
公共函数反序列化(obj:
,E:
):
{
var toret:对象=;
toret.originalEvent = e;
if (obj.data.elements("error").length() > 0)
{
toret.isError = true;
toret.data = obj.data;
}
else
{
toret.isError = false;
toret.metadata = obj.metadata;
toret.data = obj.data;
}
return toret;
}
/**
*网关的结果处理程序
*反序列化结果,然后调用实际事件处理程序
*(在Dorequest函数中发出请求时设置)
*
*@param e resultEvent服务器响应和有关连接的详细信息
/
公共函数resultHandler(e:resultEvent):void
{
TopAS:
=反序列化(e.result,e);
e.token.handler.call(空,topass);
}
/**
*此连接的故障处理程序
*
*@param e faultevent错误对象
*/
公共函数faultHandler(e:faultevent):void
{
var errormessage:string=“连接错误:”+e.fault.fault string;
如果(例如故障详细信息)
{
errormessage+=“\n\n其他详细信息:”+e.fault.fault detail;
}
alert.show(错误消息);
}
/**
*使用网关实例向服务器发出请求
*
*@param method_name string服务器Dispathcer中使用的方法名
*@参数对象名-值对用于在Post中发送
*@调用完成时要调用的参数回调函数
*/
公共函数DoRequest(方法名称:字符串,参数:对象,回调:函数):void
{
//将方法添加到参数列表中
参数['method']=方法名称;
gateway.request = parameters;
var call:AsyncToken = gateway.send();
call.request_params = gateway.request;
call.handler = callback;
}
/**
*当用户单击“创建”按钮时单击处理程序
*加载“更新”画布。
*/
公共函数goToupDate():void
{
applicationscreens.selectedchild=更新;
}
/**
*加载“视图”画布。
*/
公共函数gotoview():void
{
applicationscreens.selectedchild=查看;
}
私有函数adg_itemclick(e:listeevent):void
{
var item:object=advancedDataGrid(e.currentTarget).selectedItem;
e.target.expanditem(item,!e.target.isitemopen(item),真的;
}