The problem is, always header release event is triggered before checkbox's
change event. (I don't know why. Logically, I thought checkbox's event
should trigger first and then header release should be triggered.)

If I add event.preventDefault in headerrelease, it affects other columns of
the grid(normal sorting wont work).

Hence, I added a boolean flag and I am setting it to true on checkbox's
mouseup event. And then on header release, I am avoiding
event.preventdefault based on this flag value. This works for me.

Thanks everyone.

On Thu, Dec 11, 2014 at 12:14 AM, Alex Harui <[email protected]> wrote:

> http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf66ce9
> -7fd6.html
>
> The “headerRelease” event can be cancelled with preventDefault.
>
> Also note that the checkbox change is probably a result of mouse events
> that the DG is using to send the headerRelease event, so another option is
> to stopImmediatePropagation on mouseEvents, but that might screw up
> something else.
>
> -Alex
>
> On 12/10/14, 2:27 AM, "Deepak MS" <[email protected]> wrote:
>
> >Here's what I'm trying(sample application):
> >
> >
> ><?xml version="1.0" encoding="utf-8"?>
> ><mx:Application xmlns:mx="http://www.adobe.com/2006/mxml";
> >layout="vertical"
> >minWidth="955" minHeight="600" >
> >
> >    <mx:Script>
> >        <![CDATA[
> >            import mx.utils.ObjectUtil;
> >            public function
> >sortStringFunction(totalFieldName:String,totalValue:String,
> >fieldName:String,  isNumeric:Boolean = false):Function{
> >
> >                return function(obj1:Object, obj2:Object):int
> >                {
> >                    if(obj1[totalFieldName] == totalValue){
> >
> >
> >                        return 0;
> >
> >                    }else if(obj2[totalFieldName] == totalValue){
> >
> >
> >                        return 0;
> >
> >                    }else{
> >
> >                        if(isNumeric)
> >                        {
> >                            return
> >ObjectUtil.numericCompare(obj1[fieldName],obj2[fieldName]);
> >                        }else
> >                        {
> >                            return
> >ObjectUtil.stringCompare(obj1[fieldName],obj2[fieldName],true);
> >                        }
> >
> >                    }
> >
> >                }
> >            }
> >        ]]>
> >    </mx:Script>
> >
> >    <mx:ArrayCollection id="ac">
> >        <mx:Object ischecked="true" color="" name="ABC"/>
> >        <mx:Object ischecked="true" color="" name="KJHD"/>
> >        <mx:Object ischecked="true" color="" name="ADFDGG"/>
> >        <mx:Object ischecked="true" color="" name="SDF"/>
> >        <mx:Object ischecked="true" color="" name="TRF"/>
> >        <mx:Object ischecked="true" color="" name="DF"/>
> >        <mx:Object ischecked="true" color="" name="YTU"/>
> >        <mx:Object ischecked="true" color="" name="Total"/>
> >    </mx:ArrayCollection>
> >    <mx:DataGrid dataProvider="{ac}" width="500" height="500"
> >sortableColumns="true">
> >        <mx:columns>
> >            <mx:DataGridColumn sortable="true"
> >sortCompareFunction="{sortStringFunction('name','Total','name')}">
> >                <mx:headerRenderer>
> >                    <mx:Component>
> >                        <mx:VBox  paddingLeft="5" verticalAlign="middle"
> >horizontalAlign="left">
> >                            <mx:Script>
> >                                <![CDATA[
> >                                    import mx.controls.Alert;
> >                                    import mx.events.DataGridEvent;
> >
> >                                    protected function
> >checkbox2_changeHandler(event:Event):void
> >                                    {
> >
> >                                        /*  event.preventDefault();
> >                                        event.stopImmediatePropagation();
> >*/ // this doesn't avoid sorting. I want to avoid default sorting here
> >
> >                                        for each(var item:Object in
> >outerDocument.ac)
> >                                        {
> >                                            item['ischecked'] =
> >event.currentTarget.selected;
> >                                        }
> >
> >                                        outerDocument.ac.refresh();
> >                                    }
> >
> >
> >                                ]]>
> >                            </mx:Script>
> >
> >                            <mx:HBox>
> >                                <mx:Button width="15" height="15"/>
> >                                <mx:Label text="ATCs" />
> >                            </mx:HBox>
> >                            <mx:CheckBox
> >change="checkbox2_changeHandler(event)" label="Check All" />
> >                        </mx:VBox>
> >
> >                    </mx:Component>
> >                </mx:headerRenderer>
> >
> >                <mx:itemRenderer>
> >                    <mx:Component>
> >
> >                        <mx:CheckBox selected="{data.ischecked}" label="{
> >data.name}">
> >
> >                        </mx:CheckBox>
> >
> >                    </mx:Component>
> >                </mx:itemRenderer>
> >            </mx:DataGridColumn>
> >        </mx:columns>
> >    </mx:DataGrid>
> ></mx:Application>
> >
> >
> >On Wed, Dec 10, 2014 at 3:24 PM, Deepak MS <[email protected]>
> >wrote:
> >
> >> Yes, I did. On click of header button, I called those 2 methods but it
> >> still sorts the column data.
> >>
> >> On Wed, Dec 10, 2014 at 3:15 PM, Evyatar Ben Halevi-Arbib <
> >> [email protected]> wrote:
> >>
> >>> Have you tried using the following calls in your renderer's event
> >>>handler
> >>> function?
> >>> event.preventDefault();
> >>> event.stopImmediatePropagation()
> >>>
> >>> Regards,
> >>> Evyatar
> >>>
> >>> On Wed, Dec 10, 2014 at 11:30 AM, Deepak MS <[email protected]>
> >>> wrote:
> >>>
> >>> > Hey guys,
> >>> > I have a Datagrid with first column being a custom itemrenderer with
> >>>a
> >>> > check box, a box(to display color) and then a label.
> >>> >
> >>> > I am using headererRenderer too for that column, but with a check box
> >>> and a
> >>> > button. The header's check box is used to check\uncheck all items in
> >>>the
> >>> > datagrid.
> >>> >
> >>> > When I click on headererenderer's button or checkbox, the data is
> >>> getting
> >>> > sorted in the grid. I don't want to do sort when I click on any item
> >>>in
> >>> > headerenderer, I want to sort it only when user clicks on header
> >>>apart
> >>> from
> >>> > that button and checkbox.
> >>> >
> >>> > I tried to stop event propogation, but always header release event is
> >>> > triggered first than headerrenderer's button or check box click. So
> >>>stop
> >>> > propagation wont work.
> >>> >
> >>> > Is there anyway to avoid sorting on click of headerrenderer item? I'm
> >>> using
> >>> > Flex 3.6.
> >>> >
> >>> > Cheers!
> >>> >
> >>>
> >>
> >>
>
>

Reply via email to