Flash 用datagrid中的新值替换旧值
我的datagrid由3列组成。如果用户编辑数量列中的第一个单元格,例如从1到2,则价格列的第一个单元格将加倍为值,例如从5到10。我该怎么做Flash 用datagrid中的新值替换旧值,flash,actionscript-3,datagrid,Flash,Actionscript 3,Datagrid,我的datagrid由3列组成。如果用户编辑数量列中的第一个单元格,例如从1到2,则价格列的第一个单元格将加倍为值,例如从5到10。我该怎么做 Qty | Description | Price 1 | apple | 5 1 | cherry | 2 1 | orange | 4 以下是我使用的代码: var dp:DataProvider = new DataProvider(); var tempVal
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();
你需要在某个地方跟踪每单位的价格。也许再加一个?这一列。任何时候你改变数量,它都应该将数量乘以每单位的价格,并将该值转化为价格。然后,无论何时更改数量,它都会根据每单位价格计算该项目的总数量,然后更新所有项目的总数量 我不熟悉您正在使用的DataGrid类,但我会修改您的函数,以获取数量值和单位价格 这里的代码行//是,您希望乘以Qty*PricePerUnit,并将该值指定给同一行的PriceTotal 如果你想用一种简陋的、逆向的方式来做这件事,以避免在每单位列中添加一个价格
price = (price / prevValue) * newValue;
…只要一开始价格合适,就可以给你这个号码。我找到了一些关于editFieldindex:uint、dataField:String、data:Object的信息。这就是我要找的吗?我不知道这对我有什么帮助。没有方法属性可以派上用场吗?我需要编辑我的答案…你不是在处理普通数组,而是在处理不同的类。