2011-03-01 94 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的列中獲取所需的公式和數據。