2011-03-01 54 views
1

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

下面是一个例子:

组合框选项1(式1)由用户=(列2 - 列1)选择X栏3 = “总” 列

组合框选项2(式2)由所选择user =(Column1 - Column2)x column3 =“total”列

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

回答

1

收听组合框change事件并根据selectedItemchange事件处理程序中执行公式计算。

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 
    } 
} 
0

这很有趣。您不能直接添加侦听器,因为项目渲染器会被重用并且不会保留其身份。对问题的一些想法:

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