【问题标题】:Replace old value with new value in datagrid用数据网格中的新值替换旧值
【发布时间】:2012-01-19 12:40:51
【问题描述】:

我的数据网格由 3 列组成。如果用户编辑“数量”列中的第一个单元格(例如从 1 到 2),则“价格”列的第一个单元格将加倍作为值(例如从 5 到 10)。我该怎么做?

    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();

【问题讨论】:

  • 我发现了一些关于 editField(index:uint, dataField:String, data:Object) 的信息。这是我要找的吗?

标签: flash actionscript-3 datagrid


【解决方案1】:

您需要在某个地方跟踪每件商品的价格。也许为此添加另一个(可编辑?)列。每当您更改数量时,都应将数量乘以单位价格,然后将该值计入价格。然后,每当数量发生变化时,它还会根据每件商品的价格计算该商品的总数,然后更新所有商品的总数。

我不熟悉您正在使用的 DataGrid 类,但我会修改您的函数以获取数量值和每单位价格值。

// code goes here 行在哪里,您需要将 Qty * PricePerUnit 相乘,然后将该值赋给同一行的 PriceTotal。

如果您想以一种老套、倒退的方式执行此操作,以避免添加“每单位价格”列...

price = (price / prevValue) * newValue;

...只要价格合适,您就会得到号码。

【讨论】:

  • 我看不出这对我有什么帮助。有没有可以派上用场的方法属性?
  • 我需要编辑我的答案...您不是在处理普通数组,而是在处理不同的类。
猜你喜欢
  • 1970-01-01
  • 2010-12-10
  • 1970-01-01
  • 2021-06-09
  • 2020-08-03
  • 1970-01-01
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多