2

flex を使用して、データベースからの値をデータグリッドに表示したいと考えています。これが私のコードです。私はウェブサービスを使用しています。メソッドからのデータベース値があります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>

ありがとう

4

1 に答える 1

0

1 つの解決策は、 mx:DataGridのデータ プロバイダー ( ArrayCollectionなど) をdataProvider属性として設定することです。例については、 こちらの「 DataGrid コントロールへのデータの受け渡し」セクションを参照してください。

ここで、onResult関数が実行されたら、最初にデータ プロバイダーをクリアする ( DataGridからすべての行を削除する) ことをお勧めします。データ ソースがArrayCollectionの場合は、 removeAllメソッドを使用します。ここで、 ResultEventパラメーターから実際の Web サービス呼び出しの結果を取得します (コードでは ですevent.result)。この結果値のデータ型を知る必要があります (何らかのリスト データ構造である必要があります)。これにより、その要素をグリッドの行としてDataGrid のデータ プロバイダーに追加する方法を理解できます。たとえば、データ プロバイダーがArrayCollectionevent.resultの場合、 の各要素をこれに追加できます。addItemメソッドを使用したArrayCollectionがIListevent.resultインターフェイスを実装している場合、 ArrayCollectionのaddAllメソッドを使用してすべての行をデータ プロバイダーに追加できます。行としてデータ プロバイダーに追加するオブジェクトがmx:DataGridColumnsに準拠していることを確認してください。つまり、これらのオブジェクトには、これらの列に値が表示されるようにAreasおよびSubAreasプロパティが必要です。

AdobeWeb サービス固有のDataGridの例を次に示します。

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;
}
于 2012-12-13T03:04:57.220 に答える