      */       
     protected function grid_mouseRollOutHandler(event:MouseEvent):void
     {
-        // Handle the case where the mouse up happens outside the data grid.
-        dragInProgress = false
-            
         if ((rollRowIndex != -1) || (rollColumnIndex != -1))
         {
             const eventStageXY:Point = new Point(event.stageX, event.stageY);

        addEventListener(MouseEvent.MOUSE_UP, grid_mouseUpHandler);
        addEventListener(MouseEvent.MOUSE_MOVE, grid_mouseMoveHandler);
        addEventListener(MouseEvent.ROLL_OUT, grid_mouseRollOutHandler);
        addEventListener(MouseEvent.CLICK, grid_clickHandler);
        addEventListener(MouseEvent.DOUBLE_CLICK, grid_doubleClickHandler);        
    }
    

        const eventColumnIndex:int = gridDimensions.getColumnIndexAt(eventGridXY.x, eventGridXY.y);
        
        var gridEventType:String;
        var dispatchGridClick:Boolean;
        switch(event.type)
        {
            case MouseEvent.MOUSE_MOVE: 
            {
                gridEventType = GridEvent.GRID_MOUSE_DRAG; 
                break;
            }
            case MouseEvent.MOUSE_UP: 
            {
                gridEventType = GridEvent.GRID_MOUSE_UP;
                dispatchGridClick = (eventRowIndex == mouseDownRowIndex &&
                                     eventColumnIndex == mouseDownColumnIndex);
                break;
            }
            case MouseEvent.MOUSE_DOWN:
            {
                gridEventType = GridEvent.GRID_MOUSE_DOWN;
                mouseDownRowIndex = eventRowIndex;
                mouseDownColumnIndex = eventColumnIndex;
                dragInProgress = true;
                break;
            }
        }
        
        dispatchGridEvent(event, gridEventType, eventGridXY, eventRowIndex, eventColumnIndex);
        
        if (dispatchGridClick)
            dispatchGridEvent(event, GridEvent.GRID_CLICK, eventGridXY, eventRowIndex, eventColumnIndex);
    }
    
    /**
