2011-12-13 58 views
0

我的datagrid由3列組成。如果用戶在「數量」列(例如從1到2)編輯第一個單元格,則「價格」列的第一個單元格的值將加倍(例如從5到10)。我怎麼做?用datagrid中的新值替換舊值

Qty | Description | Price 

    1 | apple  | 5 
    1 | cherry | 2 
    1 | orange | 4 

下面是我使用的代碼:你需要跟蹤哪些單位價格

var dp:DataProvider = new DataProvider(); 
var tempValue:Number; 

var col1:DataGridColumn = new DataGridColumn("Qty"); 
grid.addColumn(col1); 
col1.dataField = "Qty"; 
col1.editable = true; 
var col2:DataGridColumn = new DataGridColumn("Denumire"); 
grid.addColumn(col2); 
col2.dataField = "Denumire"; 
col2.editable = false; 
var col3:DataGridColumn = new DataGridColumn("Gramaj"); 
grid.addColumn(col3); 
col3.dataField = "Gramaj"; 
col3.editable = false; 
var col4:DataGridColumn = new DataGridColumn("Pret"); 
grid.addColumn(col4); 
col4.dataField = "Pret"; 
col4.editable = false; 

grid.dataProvider = dp; 
grid.editable = true; 

var loader:URLLoader = new URLLoader(new URLRequest("meniu.xml")); 
loader.addEventListener(Event.COMPLETE, onComplete); 
function onComplete(e:Event):void 
{ 
    var xml:XML = new XML(loader.data); 
    var itemList:XMLList = xml..item; 
    var len:int = itemList.length(); 
    for (var i:int=0; i < len; i++) 
    { 
     dp.addItem({Qty:"1", 
     Denumire:itemList[i].denumire, 
     Gramaj:itemList[i].gramaj, 
     Pret:itemList[i].pret}); 
    } 
    grid.addEventListener(DataGridEvent.ITEM_EDIT_END, itemEditPreEnd, false, 100); 
    grid.addEventListener(DataGridEvent.ITEM_EDIT_END, itemEditPostEnd, false, -100); 

    calculateTotal(); 
} 

function itemEditPreEnd(e:DataGridEvent):void 
{ 
    var myGrid:DataGrid = e.target as DataGrid; 
    var field:String = e.dataField; 
    var row:Number = Number(e.rowIndex); 
    if (myGrid != null) 
    { 
     if (field == "Qty") 
     { 
      tempValue = myGrid.dataProvider.getItemAt(row)[field]; 
     } 
    } 
} 

function itemEditPostEnd(e:DataGridEvent):void 
{ 
    var myGrid:DataGrid = e.target as DataGrid; 
    var field:String = e.dataField; 
    var row:Number = Number(e.rowIndex); 
    if (myGrid != null) 
    { 
     if (field == "Qty") 
     { 
      var newValue:Number = myGrid.dataProvider.getItemAt(row)[field]; 
      var prevValue = myGrid.dataProvider.getItemAt(row).Pret; 
      if (newValue != tempValue) 
      { 
       var replacedValue:Number = prevValue * newValue; 
       //trace(replacedValue) 
       //code will go here 
       calculateTotal(); 
      } 
     } 
    } 
} 

function calculateTotal():void 
{ 
    var result:Number = 0; 
    var len:Number = dp.length; 
    for (var i:Number = 0; i < len; i++) 
    { 
     result += Number(dp.getItemAt(i).Pret); 
    } 
    total.text = result.toString(); 
+0

我發現了一些關於editField(index:uint,dataField:String,data:Object)的內容。這是我在找什麼? – LuciM

回答

0

地方。也許爲此添加另一個(可編輯?)列。每次更改數量時,都應該將數量乘以每單位的價格,並將該數值轉化爲價格。然後,每當數量發生變化時,它也會根據每單位價格計算該物料的總量,然後更新所有物料的總量。

我對您使用的DataGrid類不熟悉,但我會修改您的函數以獲取數量值和每單位價格值。

如果您的行// code goes here是,您希望乘以數量* PricePerUnit,並將該值分配給同一行的PriceTotal。

如果你想以避免增加每單位列價格做到這一點在哈克的,落後的生活方式......

price = (price/prevValue) * newValue; 

...會讓你的號碼,只要價格開始是正確的。

+0

我不明白這對我有何幫助。沒有方法屬性會派上用場? – LuciM

+0

我需要編輯我的答案......你不是處理普通的數組,而是與不同的類。 –