2011-12-13 60 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

我需要编辑我的答案......你不是处理普通的数组,而是与不同的类。 –