数据网格内的组合框选择

时间:2011-03-01 23:09:16

标签: flex flex3 flexbuilder

我有一个数据网格。在这个数据网格中,我有一个组合框项目编辑器。此数据网格还具有多个列,用户在每列中输入数字。然后通过公式计算这些数字,其中总和在“总计”列中过帐。在该组合框中,有两个选项供用户选择,每个选项具有不同的公式来计算输入的数字。我想要的是当用户选择“选项1”时,使用一个公式进行计算,当用户选择“选项2”时,则使用公式二进行计算。

以下是一个例子:

Combobox选项1(公式1)由用户=(Column2 - Column1)x column3 =“total”列选择

Combobox选项2(公式2)由用户=(Column1 - Column2)x column3 =“total”列选择

我意识到你会使用条件,例如“if else”语句,但我不知道该怎么做。我一直试图实现这一点但没有成功,所以任何帮助或建议将不胜感激。

2 个答案:

答案 0 :(得分:1)

收听组合框的change事件,并根据changeselectedItem事件处理程序中实施公式计算。

public function changeEventHandler(event:Event){
   if(ComboBox(evt.target).selectedItem.label == forumla1) {
      //logic
   } else if(ComboBox(evt.target).selectedItem.label == formula2) {
      //logic
   } else {
      //do nothing
   }
}

答案 1 :(得分:0)

这很有趣。您无法直接添加侦听器,因为重新使用了项呈示器并且不保留其标识。关于问题的一些想法:

  • 当组合框的选定项目发生变化时,它会调度冒泡事件EVENT.CHANGE。
  • 您应该为计算列制作自定义渲染器。将渲染器添加到datagrid(使用EVENT.ADDED)时,使用owner属性(应该是datagrid)将侦听器添加到EVENT.CHANGE。检查您是否收到该事件(例如,将渲染器的文本更改为“得到它”)。
  • 现在,当任何组合框更改时,所有计算的单元格都会收到通知。首先,您需要从项目行以外的行中丢弃事件。为此,渲染器需要知道自己的rowIndex - 请参阅Creating custom List renderers,第2项。比较rowIndex和datagrid的选定索引,如果它们不匹配则进行纾困。
  • 现在你在event.target,rowIndex和datagrid中有了combobox - 这应该足以从datagrid的列中获取所需的公式和数据。