1

Recently I am working with Spark DataGrid. Before I was using AdvancedDataGrid. In that I was capturing itemDoubleClick event. But I am not able to find such a event in SparkdataGrid.

So I want to capture double click event on single row of DataGrid.

Some people told that, I have to use my custom ItemRenderer to do that. But is there any way to capture itemDoubleClick event in Spark DataGrid without creating custom ItemRenderer ???

zero323
  • 322,348
  • 103
  • 959
  • 935
Mitul Golakiya
  • 402
  • 4
  • 20

3 Answers3

6

In actionscript:

myDataGrid.doubleClickEnabled = true;
myDataGrid.addEventListener(GridEvent.GRID_DOUBLE_CLICK, handleGridDoubleClick);

private function handleGridDoubleClick(event:GridEvent):void {
    trace(event.rowIndex, event.columIndex);
    trace(event.column, event.item);
}

Or in MXML:

<s:DataGrid doubleClickEnabled="true" 
            doubleClick="handleGridDoubleClick(event)" />

'doubleClickEnabled' is 'false' by default so you have to explicitly set it to 'true'

RIAstar
  • 11,912
  • 20
  • 37
  • 2
    I had also tried it... But the problem is, when you continously click on two rows of DataGrid, it also detect it as double click, even if those two rows are different.... It detects double click on whole grid... – Mitul Golakiya Mar 07 '12 at 10:44
  • 1
    Yeah, but that only happens when you click two rows very quickly, right? You probably wildly click around to test your interface, but in real life that hardly ever happens. If you _really_ want to work around that, your best bet would be a custom ItemRenderer indeed. – RIAstar Mar 07 '12 at 10:57
  • @MitulGolakiya To prevent that, set selectionMode to selectionMode="singleRow". – Nemi Dec 13 '17 at 19:28
1

You do not need a custom ItemRenderer. Just do it like this:

<?xml version="1.0" encoding="utf-8"?>

<s:Application
    xmlns:fx="http://ns.adobe.com/mxml/2009"
    xmlns:s="library://ns.adobe.com/flex/spark">

    <fx:Script>
        <![CDATA[
            import spark.events.GridEvent;

            private var lastColumnIndex:int = -1;
            private var lastRowIndex:int = -1;

            // set this to change the double click time   
            //mx_internal::event.grid.DOUBLE_CLICK_TIME = 480;  // ms

            protected function dataGrid_gridClickHandler(event:GridEvent):void
            {               
                trace("click on this cell", event.rowIndex, event.columnIndex);

                lastRowIndex = event.rowIndex;
                lastColumnIndex = event.columnIndex;
            }

            protected function dataGrid_gridDoubleClickHandler(event:GridEvent):void
            {
               if (event.rowIndex == lastRowIndex && event.columnIndex == lastColumnIndex)
                   trace("a real double click on this cell", event.rowIndex, event.columnIndex);
               else
                   trace("this is a gridClick on another cell", event.rowIndex, event.columnIndex);

               lastRowIndex = event.rowIndex;
               lastColumnIndex = event.columnIndex;
            }

        ]]>
    </fx:Script>


        <s:DataGrid id="dataGrid" requestedRowCount="5" verticalCenter="0" horizontalCenter="0"
                     doubleClickEnabled="true"
                      gridClick="dataGrid_gridClickHandler(event)"
                      gridDoubleClick="dataGrid_gridDoubleClickHandler(event)">
            <s:ArrayCollection>
                <s:DataItem key="1000" name="Abrasive" price="100.11" call="false"/>
                <s:DataItem key="1001" name="Brush" price="110.01" call="true"/>
                <s:DataItem key="1002" name="Clamp" price="120.02" call="false"/>
                <s:DataItem key="1003" name="Drill" price="130.03" call="true"/>
                <s:DataItem key="1004" name="Epoxy" price="140.04" call="false"/>
                <s:DataItem key="1005" name="File" price="150.05" call="true"/>
                <s:DataItem key="1006" name="Gouge" price="160.06" call="false"/>
                <s:DataItem key="1007" name="Hook" price="170.07" call="true"/>
                <s:DataItem key="1008" name="Ink" price="180.08" call="false"/>
                <s:DataItem key="1009" name="Jack" price="190.09" call="true"/>            
            </s:ArrayCollection>
        </s:DataGrid>
</s:Application>
Torsten Barthel
  • 3,059
  • 1
  • 26
  • 22
0

Set selectionMode="singleRow", or other if you prefer, and use gridDoubleClick event.

Nemi
  • 1,012
  • 10
  • 19