如何使用flex代码从数据库中检索数据

时间:2012-12-11 06:19:34

标签: actionscript-3 flex flex4.6

我想使用flex显示数据网格中来自数据库的值。这是我的代码。我正在使用webservice。我有来自application1_initializeHandler()方法的数据库值。如何将这些值提取到onResult()方法并执行数据绑定?我想要onResult()函数和数据绑定的代码。请帮忙..

<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
               xmlns:s="library://ns.adobe.com/flex/spark" 
               xmlns:mx="library://ns.adobe.com/flex/mx" initialize="application1_initializeHandler(event)">
    <fx:Script>
        <![CDATA[
            import mx.events.FlexEvent;
            import mx.rpc.AsyncResponder;
            import mx.rpc.AsyncToken;
            import mx.rpc.events.FaultEvent;
            import mx.rpc.events.ResultEvent;


            protected function application1_initializeHandler(event:FlexEvent):void
            {
                AreasOfWestBengal.loadWSDL();
                var s:String = "SELECT * FROM [CSFTestNew].[dbo].[AreasOfWestBengal]";
                var t:AsyncToken = AreasOfWestBengal.GetRec("[AreasOfWestBengal]", s, "1", "SQLExpress");
                t.addResponder(new AsyncResponder(onResult, onFault, t));
            }

            protected function onResult(event:ResultEvent, token:Object=null):void
            {


            }

            protected function onFault(event:FaultEvent, token:Object=null):void
            {
                trace(event.fault.toString());
            }
        ]]>
    </fx:Script>
    <fx:Declarations>
        <s:WebService id="AreasOfWestBengal" wsdl="https://www.geoviewer8.com/gv8webservices/CSF_NewGVOConfig/GVOConfig.asmx?wsdl"/>
    </fx:Declarations>
    <mx:DataGrid x="197" y="83" width="348" height="216">
        <mx:columns>
            <mx:DataGridColumn headerText="Areas" dataField="Areas"/>
            <mx:DataGridColumn headerText="SubAreas" dataField="SubAreas"/>
        </mx:columns>
    </mx:DataGrid>  

</s:Application>

由于

1 个答案:

答案 0 :(得分:0)

一种解决方案是为 mx:DataGrid 设置数据提供程序(如 ArrayCollection )作为其 dataProvider 属性 - 请参阅Passing Data to a DataGrid Control section here举个例子。

现在,当您的 onResult 函数执行时,您可能希望首先清除数据提供程序(从 DataGrid 中删除所有行) - 如果数据源是 ArrayCollection ,您将使用 removeAll 方法。现在从ResultEvent参数获取实际的Web服务调用结果(在您的代码中,它是event.result)。您需要知道此结果值的数据类型(它应该是某种列表数据结构),以便您可以弄清楚如何将其元素作为网格行添加到 DataGrid的数据提供程序中。例如,如果您的数据提供者是ArrayCollection,则可以使用其 addItem 方法将event.result的每个元素添加到此 ArrayCollection 中。如果event.result实现了 IList 接口,则可以使用 ArrayCollection addAll 方法将所有行添加到数据提供程序中。确保作为行添加到数据提供程序中的对象符合 mx:DataGridColumns - 即这些对象需要具有区域 SubAreas 属性,以便它们的值将显示在这些列中。

这是web service-specific DataGrid example from Adobe

protected function onResult(event:ResultEvent, token:Object=null):void
{
     // Assuming the grid's data provider is an ArrayCollection

     // (1) clear existing table rows
     dataProvider.removeAll();

     // (2) add the new rows from event.result into dataProvider 
     // using dataProvider.addAll(event.result) if possible or one at a time
     // using dataProvider.addItem(...)
     dataProvider.addAll(event.result);

     // An alternative to the above would be to replace the dataProvider 
     // of your grid with event.result if it is a compatible data type
     //       AreasOfWestBengal.dataProvider = event.result;
}