首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex DataGrid -如何将单元格的显示值传递给sortCompareFunction?

Flex DataGrid -如何将单元格的显示值传递给sortCompareFunction?
EN

Stack Overflow用户
提问于 2013-01-30 15:56:48
回答 1查看 1.2K关注 0票数 1

我有一个在列上使用dataGrid的labelFunction。这会将dataField更改为不同的值。

我在同一列上有一个sortCompareFunction。但是,sortCompareFunction只使用底层数据项值。

我知道我可以从labelFunction内部调用sortCompareFunction,在进行比较之前更改值,但我要做的是:将显示的值从列传递给sortCompareFunction。这有可能吗。

下面的一些示例代码来表示问题(如果您复制和过去到一个新的Flex 3应用程序,则可以工作)

在图像中,值"AAAAA“后面的数据是”墙“,所以在进行排序时,它出现在中间,我希望访问"AAAA”值:

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical"
                initialize="init()">
    <mx:Script>
        <![CDATA[
            import mx.collections.ArrayCollection;
            import mx.controls.dataGridClasses.DataGridColumn;
            import mx.utils.ObjectUtil;

            [Bindable]
            private var albums:ArrayCollection;

            private function init():void
            {
                var album:Object;
                albums = new ArrayCollection();

                album = new Object();
                album.name = "Who's Next";
                album.artist = "The Who";
                album.date = "Jul 31 1971";
                albums.addItem(album);

                album = new Object();
                album.name = "Exile on Main St.";
                album.artist = "The Rolling Stones";
                album.date = "May 12 1972";
                albums.addItem(album);

                album = new Object();
                album.name = "The Wall";
                album.artist = "Pink Floyd";
                album.date = "Dec 8 1979";
                albums.addItem(album);
            }

            private function nameLabelFunction(inData:Object, inColumn:DataGridColumn):String
            {
                if(inData.name == "The Wall")
                {
                    return "AAAA"
                }
                else
                    return inData.name;
            }

            private function nameSortCompare(obj1:Object, obj2:Object):int
            {
                return ObjectUtil.stringCompare(obj1["name"], obj2["name"], true);
            }

        ]]>
    </mx:Script>
    <mx:DataGrid width="400" height="600" dataProvider="{albums}">
        <mx:columns>
            <mx:DataGridColumn dataField="name" headerText="Name" width="125" 
                               labelFunction="nameLabelFunction"
                               sortCompareFunction="nameSortCompare"/>

            <mx:DataGridColumn dataField="artist" headerText="Artist" width="125" />

            <mx:DataGridColumn dataField="date" headerText="Date" width="100" />
        </mx:columns>
    </mx:DataGrid>
</mx:Application>
EN

回答 1

Stack Overflow用户

发布于 2013-01-30 16:49:31

我们能用点小把戏吗?

代码语言:javascript
复制
        private function nameLabelFunction(inData:Object, inColumn:DataGridColumn):String
        {
            if(inData.name == "The Wall")
            {
                inData.realLabel = 'AAAA';

                return "AAAA"
            }
            else
            {
                inData.realLabel = inData.name;

                return inData.name;
            }
        }

        private function nameSortCompare(obj1:Object, obj2:Object):int
        {
            return ObjectUtil.stringCompare(obj1["realLabel"], obj2["realLabel"], true);
        }

//编辑

使用labelFunction本身的另一种方法

可以使用该函数计算要比较的值。

假设f是类函数的一个对象,那么

代码语言:javascript
复制
f.call(dg.columns[0], obj1, dg.columns[0])

给出datagrid字段的实际标签。

代码语言:javascript
复制
//this function should not be changed
        private function nameLabelFunction(inData:Object, inColumn:DataGridColumn):String
        {
            if(inData.name == "The Wall")
                return "AAAA"
            else
                return inData.name;
        }

//the actual comparison looks now like this:
        private function nameSortCompare(obj1:Object, obj2:Object):int
        {
            var f:Function = (dg.columns[0] as DataGridColumn).labelFunction;

            return ObjectUtil.stringCompare(f.call(dg.columns[0], obj1, dg.columns[0]), f.call(dg.columns[0], obj2, dg.columns[0]), true);
        }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14608204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档