Как назначить DataProvider для DataGrid Dyanmically во Flex? - PullRequest
0 голосов
/ 19 июля 2010

я сделал следующим образом

У меня есть метод, который приводит данные конкретной таблицы, как указано в параметре этого метода,

Теперь я хочу получить данные из соответствующей таблицы и ее списка, а также отправить обратно flex и динамически сформировать Grid & add dataprovider динамически, как для соответствующих ему столбцов таблицы на стороне flex?

Удаленный объект (класс Java)

 public List<List<String>> getMasterTableData(String name) 
 { 
  String designMaster = "tbl_design_master"+name;

  String masterTableName = "tbl_master"+name; 

  String[][] res ;

  List<List<String>> list = new ArrayList<List<String>>();

  try 
  {
   st = connection.createStatement();

   ResultSet rs1 = st.executeQuery("select * from "+designMaster);

   int len = 0;

   while(rs1.next())
   { len++; }

   ResultSet rs2 = st.executeQuery("select * from "+masterTableName);

   while(rs2.next())
   { 
    List<String>  ll = new ArrayList<String>();

    for(int i=1;i<=len; i++)
    {
     ll.add(rs2.getString(i));     
    }    
    list.add(ll);
   }   
  }
  catch (SQLException e) {   
   e.printStackTrace();
  }

  return list;
 }

гибкий код:

<mx:RemoteObject id="RO" destination="adminServiceImpl"> 
 <mx:method name="getMasterDesign" result="getMasterDesignRH(event)" fault="FH(event)" />
 <mx:method name="getMasterTableData" result="getMasterTableDataRH(event)" fault="FH(event)"/>
</mx:RemoteObject> 

 <mx:Script>
  <![CDATA[

  [Bindable] private var ac:ArrayCollection = new ArrayCollection(); 

  public function init(Str:String):void
  {
   RO.getMasterDesign(Str);

   Application.application.selectedgridItem = Str;

   RO.getMasterTableData(Str);
  }

  private function getMasterDesignRH(event:ResultEvent):void
  {
   Application.application.designList = event .result as ArrayCollection; 

   var aColumns:Array = new Array();   

   for(var i:int=0; i< Application.application.designList.length; i++)
   { 
    var dgc:DataGridColumn = new DataGridColumn();

    dgc.headerText = Application.application.designList.getItemAt(i).colName; 

    //dgc.dataField = Application.application.designList.getItemAt(i).colName;

    aColumns.push(dgc);   
   }
   mainGrid.columns = aColumns;
  }
  private function getMasterTableDataRH(event:ResultEvent):void
  {
   ac = event.result as ArrayCollection; 

   mainGrid.dataProvider  = ac;  
  }  
  private function FH(event:FaultEvent):void{ 
   Alert.show(event.fault.faultString);  
  }


  ]]>
 </mx:Script>

  <mx:HBox width="100%" height="80%">
   <mx:DataGrid id="mainGrid" width="100%" height="100%" />
  </mx:HBox>

getMasterDesign - это коллекция ArrayCollection, которая заполняется именами столбцов и компонентами, которые будут отображаться

Пример: getMasterDesign (emp) Таблица empMasterDesign выглядит следующим образом

colName    component 
--------------------
EmpName    textBox
empSal     textBox 
empDesi    ComboBox 

empMasterData:

empName | EmpSal | EmpDesi 
abc       1000     Cler## Heading ##ck 
xyz       2000     Manager

Теперь я хочу, чтобы это динамически создавало Datagrid в flex с использованием его таблицы параметров и основных данных в сценарии действия, которое я выполнил каждый раз, моя dataGrid сформирована так же, как и для его основного проекта, но данные не отображаются?

1 Ответ

1 голос
/ 19 июля 2010

Вы должны установить dataField на соответствующее значение. Исходя из приведенных данных, это выглядит как colName поле в метаданных и его соответствующее имя в таблице не совпадают. Например, это EmpName в дизайне и empName в исходной таблице; ни одно из полей не соответствует - empSal против EmpSal, empDesi против EmpDesi. Исправьте это, назначьте colName на dataField, и все будет хорошо.

...