PDA

View Full Version : [AS3] dataGrid ListEvent.ITEM_CLICK problem


chr15athome
12-16-2008, 10:32 PM
Hi

I have a data grid that I want to select a row and then hit a button to delete the row. I have used the code below to achieve this but the only way I can get the selected row ID is if a field is editted first. Any clicks on uneditable cells prior to this do not pass on the rowID. Once a cell has been edited then all other cells respond to the click events.

import fl.events.ListEvent;
dataGrid.addEventListener(ListEvent.ITEM_CLICK, clickHandler, false, 100);

function clickHandler(e:ListEvent):void
{
//dataGrid.click
rowID = Number(e.rowIndex);
trace(Number(e.rowIndex));
}

delete_btn.addEventListener(MouseEvent.CLICK, removeBasketItem);
function removeBasketItem(event:MouseEvent){
dataGrid.removeItemAt(rowID);
shop_cart.removeElementAt(rowID);
trace("item removed at " + rowID);
}

chr15athome
12-16-2008, 11:21 PM
Hi

I have just realised that nothing including buttons are listening until the edit cell takes place. I have implemented the cell edit function which uses 2 datagrid event listeners one for the value before the cell is edited and for the value that the user has changed the value to so that the data grid can be updated. To do this the event listeners have to be triggered at certain priorities which I think is affecting my other listeners. Here is the code for this:-

dataGrid.addEventListener(DataGridEvent.ITEM_EDIT_ END, itemEditPreEnd, false, 99);

var tempValue;

function itemEditPreEnd(event:DataGridEvent):void
{
var grid:DataGrid = event.target as DataGrid;
var field:String = event.dataField;
var row:Number = Number(event.rowIndex);

if (grid != null)
{
tempValue = grid.dataProvider.getItemAt(row)[field];
}
}

dataGrid.addEventListener(DataGridEvent.ITEM_EDIT_ END, itemEditPostEnd, false, -100);

function itemEditPostEnd(event:DataGridEvent):void
{
var grid:DataGrid = event.target as DataGrid;
var field:String = event.dataField;
var row:Number = Number(event.rowIndex);
if (grid != null)
{
var newValue:Number = grid.dataProvider.getItemAt(row)[field];

if (newValue != tempValue)
{
var newSubtotal:Number = dataGrid.dataProvider.getItemAt(row).Quantity * dataGrid.dataProvider.getItemAt(row).Price;
dataGrid.replaceItemAt({Description:dataGrid.dataP rovider.getItemAt(row).Description,Quantity:dataGr id.dataProvider.getItemAt(row).Quantity, Price:dataGrid.dataProvider.getItemAt(row).Price, Subtotal:String(newSubtotal)},row);
allProducts[row].setQuantity(dataGrid.dataProvider.getItemAt(row). Quantity);
calculateTotal();

}
}

dp2142
01-21-2009, 05:39 PM
i was able to get the click event to happen using your code first posted. i chg'd my grid to editable and the event fired and dumped out your trace. it correctly told me the row. so i did not need to use your second work-around