如何pageScroll mx.DataGrid编程? [英] How to pageScroll mx.DataGrid programmatically?

查看:165
本文介绍了如何pageScroll mx.DataGrid编程?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果有一些英文的错误,我想道歉。
我想通过点击按钮栏事件编程滚动数据网格。

随着code是工作,但它滚动一个接一个。
我需要的是滚动页面,如单击空白水平scrollTrack区域。
任何帮助将大大AP preciated。

 < XML版本=1.0编码=UTF-8&GT?;
< MX:应用的xmlns:MX =htt​​p://www.adobe.com/2006/mxml布局=绝对的creationComplete =的init()>
    < MX:脚本>
        <![CDATA [
            进口mx.events.ItemClickEvent;
            进口mx.collections.ArrayCollection;

            私人VAR ARR:ArrayCollection的=新ArrayCollection的([
                {COL1:"aaa",COL2:"bbb",COL3:"ccc",COL4:"ddd",COL5:"eee",COL6:"fff",COL7:"ggg",COL8:"hhh",COL9:"iii",COL10:"jjj",COL11:"kkk",COL12:"lll",COL13:"mmm",COL14:"nnn",COL15:"ooo",COL16:"ppp",COL17:"qqq",COL18:"rrr",COL19:"sss",COL20:"ttt"}
            ]);
            公共职能的init():无效
            {
                scrollController.dataProvider = [|&所述;,&所述;,>中,> |];
                grid.dataProvider = ARR;
            }

            公共职能doScroll(事件:ItemClickEvent):无效
            {
                如果(event.index == 0)
                {
                    //力移动到左端。
                    grid.horizo​​ntalScrollPosition = 0;
                }
                否则,如果(event.index == 1){
                    //向左移动一个接一个
                    // ***我想修改这里。
                    如果(grid.horizo​​ntalScrollPosition大于0){
                        grid.horizo​​ntalScrollPosition  -  = 1;
                    }
                }
                否则,如果(event.index == 2){
                    //向右移动一个接一个
                    // ***我想修改这里。
                    如果(grid.horizo​​ntalScrollPosition< grid.maxHorizo​​ntalScrollPosition){
                        grid.horizo​​ntalScrollPosition + = 1;
                    }
                }
                其他{
                    //力移动到右端。
                    如果(grid.horizo​​ntalScrollPosition< grid.maxHorizo​​ntalScrollPosition){
                        grid.horizo​​ntalScrollPosition = grid.maxHorizo​​ntalScrollPosition;
                    }
                }
            }

        ]]≥
    < / MX:脚本>
    &所述;的mx:按钮栏的id =scrollControllerY =0itemClick在=doScroll(事件)/>
    &所述;的mx:数据网格的id =网格Y =30宽度=340horizo​​ntalScrollPolicy =上>
        < MX:列>
            < MX:一个DataGridColumn HEADERTEXT =COL1的dataField =COL1WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL2的dataField =COL2WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL3的dataField =COL3WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL4的dataField =COL4WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL5的dataField =COL5WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL6的dataField =COL6WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL7的dataField =COL7WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL8的dataField =COL8WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL9的dataField =COL9WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL10的dataField =COL10WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL11的dataField =COL11WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL12的dataField =COL12WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL13的dataField =COL13WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL14的dataField =COL14WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL15的dataField =COL15WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL16的dataField =COL16WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL17的dataField =COL17WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL18的dataField =COL18WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL19的dataField =COL19WIDTH =100/>
            < MX:一个DataGridColumn HEADERTEXT =COL20的dataField =COL20WIDTH =100/>
        < / MX:列>
    < / MX:数据网格>
< / MX:用途>
 

运行演示的wonderfl

更新9月16日17:15(JST)
我CustomDateGrid(扩展mx.DataGrid)写这篇code和按钮栏调用。 但没有发生。

 公共职能scrollToRightPage():无效{

        VAR三角洲:数= this.horizo​​ntalScrollBar.pageScrollSize!= 0? this.horizo​​ntalScrollBar.pageScrollSize:this.horizo​​ntalScrollBar.pageSize;
        VAR方向:数= 1;
        VAR的scrollPosition:数= this.horizo​​ntalScrollPosition +方向*增量;

        VAR oldPosition:数= this.horizo​​ntalScrollPosition;
        VAR事件:表示ScrollEvent =新表示ScrollEvent(ScrollEvent.SCROLL);
        event.detail = ScrollEventDetail.PAGE_RIGHT;
        event.position =则scrollPosition;
        event.delta =则scrollPosition  -  oldPosition;
        event.direction = ScrollBarDirection.HORIZONTAL;
        this.horizo​​ntalScrollBar.dispatchEvent(事件);

        //调用的scrollHandler(在DataGrid.as定义的保护功能),而不是horizo​​ntalScrollBar.dispatchEvent也没有发生。
        //的scrollHandler(事件);
    }
 

解决方案

我放弃了派遣表示ScrollEvent。 但无论如何,我通过设置horizo​​ntalScrollPosition的解决了这个问题。

首先,我添加了这些功能CustomDataGrid。

 公共职能scrollToRightPage():无效{

    //我从mx_internal功能pageScroll(在ScrollBar.as定义)的暗示。
    VAR三角洲:数= this.horizo​​ntalScrollBar.pageScrollSize!= 0? this.horizo​​ntalScrollBar.pageScrollSize:this.horizo​​ntalScrollBar.pageSize;
    VAR方向:数= 1;
    VAR的scrollPosition:数= this.horizo​​ntalScrollPosition +方向*增量;

    this.horizo​​ntalScrollPosition =则scrollPosition;
}

公共职能scrollToLeftPage():无效{

    VAR三角洲:数= this.horizo​​ntalScrollBar.pageScrollSize!= 0? this.horizo​​ntalScrollBar.pageScrollSize:this.horizo​​ntalScrollBar.pageSize;
    VAR方向:数= -1;
    VAR的scrollPosition:数= this.horizo​​ntalScrollPosition +方向*增量;

    this.horizo​​ntalScrollPosition =则scrollPosition;
}
 

和从外部类调用像下面。

 如果(event.index == 0)
{
    grid.horizo​​ntalScrollPosition = 0;
}
否则,如果(event.index == 1){
    如果(grid.horizo​​ntalScrollPosition大于0){
        //grid.horizo​​ntalScrollPosition  -  = 1;

        //跳转到页面左侧。
        grid.scrollToLeftPage();
    }
}
否则,如果(event.index == 2){
    如果(grid.horizo​​ntalScrollPosition< grid.maxHorizo​​ntalScrollPosition){
        //grid.horizo​​ntalScrollPosition + = 1;

        //跳转到正确的页面。
        grid.scrollToRightPage();
    }
}
其他{
    如果(grid.horizo​​ntalScrollPosition< grid.maxHorizo​​ntalScrollPosition){
        grid.horizo​​ntalScrollPosition = grid.maxHorizo​​ntalScrollPosition;
    }
}
 

If there are some mistakes in English, I'd like to apologize.
I want to scroll datagrid programmatically by click buttonbar event.

Following code is work, but it scrolls one by one.
What I need is page scrolling, like clicking empty horizontal scrollTrack area.
Any help would be greatly appreciated.

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()">
    <mx:Script>
        <![CDATA[
            import mx.events.ItemClickEvent;
            import mx.collections.ArrayCollection;

            private var arr:ArrayCollection = new ArrayCollection([
                {COL1:"aaa",COL2:"bbb",COL3:"ccc",COL4:"ddd",COL5:"eee",COL6:"fff",COL7:"ggg",COL8:"hhh",COL9:"iii",COL10:"jjj",COL11:"kkk",COL12:"lll",COL13:"mmm",COL14:"nnn",COL15:"ooo",COL16:"ppp",COL17:"qqq",COL18:"rrr",COL19:"sss",COL20:"ttt"}
            ]);
            public function init(): void
            {
                scrollController.dataProvider=["|<", "<", ">", ">|"];
                grid.dataProvider = arr;
            }

            public function doScroll(event: ItemClickEvent): void
            {
                if (event.index ==0)
                {
                    // force move to left end.
                    grid.horizontalScrollPosition = 0;
                }
                else if (event.index ==1){
                    // move left one by one
                    // *** I want modify here.
                    if (grid.horizontalScrollPosition > 0){
                        grid.horizontalScrollPosition -= 1;
                    }
                }
                else if (event.index ==2){
                    // move right one by one
                    // *** I want modify here too.
                    if (grid.horizontalScrollPosition < grid.maxHorizontalScrollPosition){
                        grid.horizontalScrollPosition += 1;
                    }
                }
                else{
                    // force move to right end.
                    if (grid.horizontalScrollPosition < grid.maxHorizontalScrollPosition){
                        grid.horizontalScrollPosition = grid.maxHorizontalScrollPosition;
                    }
                }
            }

        ]]>
    </mx:Script>
    <mx:ButtonBar id="scrollController" y="0" itemClick="doScroll(event)"/>
    <mx:DataGrid id="grid" y="30" width="340" horizontalScrollPolicy="on">
        <mx:columns>
            <mx:DataGridColumn headerText="COL1" dataField="COL1" width="100"/>
            <mx:DataGridColumn headerText="COL2" dataField="COL2" width="100"/>
            <mx:DataGridColumn headerText="COL3" dataField="COL3" width="100"/>
            <mx:DataGridColumn headerText="COL4" dataField="COL4" width="100"/>
            <mx:DataGridColumn headerText="COL5" dataField="COL5" width="100"/>
            <mx:DataGridColumn headerText="COL6" dataField="COL6" width="100"/>
            <mx:DataGridColumn headerText="COL7" dataField="COL7" width="100"/>
            <mx:DataGridColumn headerText="COL8" dataField="COL8" width="100"/>
            <mx:DataGridColumn headerText="COL9" dataField="COL9" width="100"/>
            <mx:DataGridColumn headerText="COL10" dataField="COL10" width="100"/>
            <mx:DataGridColumn headerText="COL11" dataField="COL11" width="100"/>
            <mx:DataGridColumn headerText="COL12" dataField="COL12" width="100"/>
            <mx:DataGridColumn headerText="COL13" dataField="COL13" width="100"/>
            <mx:DataGridColumn headerText="COL14" dataField="COL14" width="100"/>
            <mx:DataGridColumn headerText="COL15" dataField="COL15" width="100"/>
            <mx:DataGridColumn headerText="COL16" dataField="COL16" width="100"/>
            <mx:DataGridColumn headerText="COL17" dataField="COL17" width="100"/>
            <mx:DataGridColumn headerText="COL18" dataField="COL18" width="100"/>
            <mx:DataGridColumn headerText="COL19" dataField="COL19" width="100"/>
            <mx:DataGridColumn headerText="COL20" dataField="COL20" width="100"/>
        </mx:columns>
    </mx:DataGrid>
</mx:Application>

Run demo on wonderfl

Updated Sep 16 17:15(JST)
I wrote this code in CustomDateGrid(extended mx.DataGrid) and call from ButtonBar. But nothing occurred.

    public function scrollToRightPage(): void{

        var delta:Number = this.horizontalScrollBar.pageScrollSize != 0 ? this.horizontalScrollBar.pageScrollSize : this.horizontalScrollBar.pageSize;
        var direction:Number = 1;
        var scrollPosition:Number = this.horizontalScrollPosition + direction * delta;

        var oldPosition: Number = this.horizontalScrollPosition;
        var event:ScrollEvent = new ScrollEvent(ScrollEvent.SCROLL);
        event.detail = ScrollEventDetail.PAGE_RIGHT;
        event.position = scrollPosition;
        event.delta = scrollPosition - oldPosition;
        event.direction = ScrollBarDirection.HORIZONTAL;
        this.horizontalScrollBar.dispatchEvent(event);

        // Call scrollHandler(the protected function defined at DataGrid.as) instead of horizontalScrollBar.dispatchEvent was also nothing occurred.
        // scrollHandler(event);
    }

解决方案

I gave up to dispatch ScrollEvent. But anyway I solved it by setting horizontalScrollPosition.

First, I added these functions to CustomDataGrid.

public function scrollToRightPage(): void{

    // I got a hint from "mx_internal function pageScroll"(defined at ScrollBar.as).
    var delta:Number = this.horizontalScrollBar.pageScrollSize != 0 ? this.horizontalScrollBar.pageScrollSize : this.horizontalScrollBar.pageSize;
    var direction:Number = 1;
    var scrollPosition:Number = this.horizontalScrollPosition + direction * delta;

    this.horizontalScrollPosition = scrollPosition;
}

public function scrollToLeftPage(): void{

    var delta:Number = this.horizontalScrollBar.pageScrollSize != 0 ? this.horizontalScrollBar.pageScrollSize : this.horizontalScrollBar.pageSize;
    var direction:Number = -1;
    var scrollPosition:Number = this.horizontalScrollPosition + direction * delta;

    this.horizontalScrollPosition = scrollPosition;
}

And call from external class like below.

if (event.index ==0)
{
    grid.horizontalScrollPosition = 0;
}
else if (event.index ==1){
    if (grid.horizontalScrollPosition > 0){
        //grid.horizontalScrollPosition -= 1;

        // Jump to left page.
        grid.scrollToLeftPage();
    }
}
else if (event.index ==2){
    if (grid.horizontalScrollPosition < grid.maxHorizontalScrollPosition){
        //grid.horizontalScrollPosition += 1;

        // Jump to right page.
        grid.scrollToRightPage();
    }
}
else{
    if (grid.horizontalScrollPosition < grid.maxHorizontalScrollPosition){
        grid.horizontalScrollPosition = grid.maxHorizontalScrollPosition;
    }
}

这篇关于如何pageScroll mx.DataGrid编程?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆