Как получить значение ComboBox в DataGrid - PullRequest
0 голосов
/ 13 мая 2010

Хотя это может быть простой проблемой, у меня чертовски не хватает времени, чтобы найти решение.

У меня есть DataGrid с ComboBox в качестве ItemRenderer для одного из моих столбцов. Когда пользователь выбирает строку, я хочу получить выбранное значение ComboBox для выбранной строки.

РЕДАКТИРОВАТЬ: Я должен был упомянуть, что свойство dataField2_Array в myData на самом деле Array является dataProvider для ComboBox. Каждый объект в myData может иметь совершенно разные значения в этом массиве, поэтому ComboBox в каждой строке DataGrid может иметь совершенно разные параметры для выбора.

Есть предложения?

Пример кода:

<mx:DataGrid id="myGrid"
  dataProvider="{myData}">
    <mx:columns>
      <mx:DataGridColumn headerText="Column 1" dataField="dataField1" />
      <mx:DataGridColumn headerText="Column 2" dataField="dataField2_Array">
        <mx:itemRenderer>
          <mx:Component>
            <mx:HBox paddingLeft="5">
              <mx:ComboBox id="myComboBox" dataProvider="{data.dataField2_Array}" />
            </mx:HBox>
          </mx:Component>
        </mx:itemRenderer>
      </mx:DataGridColumn>
    </mx:columns>
</mx:DataGrid>

Ответы [ 2 ]

2 голосов
/ 13 мая 2010
<mx:DataGrid ="MyDataGrid">
<mx:columns>
<mx:DataGridColumn headerText="Resource" width="200" itemRenderer="com.myClasses.myGridDropdownRenderer"/>
</mx:columns>
</mx:DataGrid>

Вот ваш itemRenderer для вашей сетки данных.

<?xml version="1.0" encoding="utf-8"?>
<mx:ComboBox prompt="Please select a Rating" change="stuffChanged()" dataProvider="{data.dataField2_Array}"
     xmlns:mx="http://www.adobe.com/2006/mxml">
<mx:Script>
        <![CDATA[
            import flash.events.Event;
            import mx.controls.Alert;
            import mx.core.Application;
            import mx.collections.ArrayCollection;



            override public function set data( value:Object ) : void {
                super.data = value;

            }



           public function stuffChanged():void{
               var myListData:DataGridListData = DataGridListData(listData);
               var r:int=myListData.rowIndex;
               var c:int=myListData.columnIndex;
              //Application.application.whateverStuff[r+1][c]=this.value;
               Application.application.whateverStuff[r+1][c]=
              this.selectedItem.data;
              }



        ]]>
    </mx:Script>

</mx:ComboBox>

Это будет в вашем основном приложении, которое будет содержать это значение.

[Bindable] public var whateverStuff:ArrayCollection;

Теперь, когда ваши данные изменены, они содержат данные. Вы нажимаете на кнопку сохранить это значение в объекте строк.

[Bindable] public var rows:Object = new Object();
rows=Application.application.whateverStuff; 

Когда вы отправляете значение обратно в базу данных, отправляйте все вместе с этим объектом строк.

Обновление:

После того, как я прочитал ваш комментарий к предыдущему ответу, я узнал, что у каждого из вашего поля со списком есть свои варианты. Ты должен был упомянуть об этом раньше.

Когда вы щелкаете по выбранным строкам, вы должны иметь возможность собрать идентификатор строки, и это обеспечит обновление только идентификатора этой строки в базе данных, даже если вы обновите комбинированный список других строк ,

После выбора строки щелкните и проверьте, какой идентификатор строки вы выбрали с помощью Alert или trace, а затем отправьте это значение только через диспетчер событий.

1 голос
/ 14 мая 2010

Добавьте функцию myGrid_click к событию click вашей DataGrid:

<mx:DataGrid id="myGrid" dataProvider="{myData}" click="myGrid_click(event)" >

В этой функции сохраните selectedIndex сетки и используйте ее, чтобы получить объект из своего dataProvider (скажем, это массив MyObjects, и нас интересует свойство dataField2 этих MyObjects):

public function myGrid_click(event:MouseEvent):void {
    var index:int = myGrid.selectedIndex;
    var obj:MyObject = myData[index];
    var value:String = obj.dataField2;
}

Если, как это часто бывает, объект не хранит действительное значение, а просто хранит индекс для таблицы поиска (dataField2_Array?), Напишите цикл for для итерации по dataField2_Array для поиска этого значения (actualValue ) и назначить его ранее объявленной переменной с большей областью действия (selectedRowComboBoxValue):

public function myGrid_click(event:MouseEvent):void {
    var index:int = myGrid.selectedIndex;
    var obj:MyObject = myData[index];
    var value:int = obj.dataField2;

    for (var i:int = 0; i < dataField2_Array.length; i++) {
        if (value == dataField2_Array[index].id) {
            selectedRowComboBoxValue = dataField2_Array.actualValue;
            break;
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...