Flex DataGrid列排序不起作用 [英] Flex DataGrid column sort descending not working

查看:132
本文介绍了Flex DataGrid列排序不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述



在Flex 4中,我有一个Spark DataGrid,并且具有一个项目渲染器和一个排序比较函数,为列。奇怪的是,此列不会按降序排列。



数据最初未排序。单击列标题显示向上箭头,数据按升序排序。但是,再次单击列标题什么也不做。我们已经通过代码进行了调试,发现sort比较函数中的column.sortDescending始终为false。



(应该是这样一个降序排序应该是这样吗?)



我已经在这里搜索了很长时间,在这里搜索,但没有找到任何东西。 / p>

任何人都有任何想法?



提前感谢



//编辑



简单示例代码:



CreationComplete函数初始化数据使用一些随机值:

  protected function application1_creationCompleteHandler(event:FlexEvent):void 
{
arrayData = new ArrayCollection();

var obj:Object; (var i:Number = 0; i< 10; i ++){
obj = new Object();

obj.value1 = i;
obj.value2 = Math.floor(Math.random()*(1 + 100 - 1))+ 1;
obj.value3 = Math.floor(Math.random()*(1 + 100 - 1))+ 1;

arrayData.addItem(obj);
}
}

Datagrid定义具有第四列的列具有项呈示器,排序比较函数定义。

 < s:DataGrid x =122y =142width =391height =223requestedRowCount =4dataProvider ={arrayData}> 
< s:columns>
< s:ArrayList>
< s:GridColumn dataField =value1headerText =Value 1>< / s:GridColumn>
< s:GridColumn dataField =value2headerText =Value 2>< / s:GridColumn>
< s:GridColumn dataField =value3headerText =Value 3>< / s:GridColumn>
< s:GridColumn headerText =Value 3sortable =trueitemRenderer =ItemRendererTestsortCompareFunction =sortCompareFunc>< / s:GridColumn>
< / s:ArrayList>
< / s:columns>
< s:typicalItem>
< fx:Object dataField1 =Sample DatadataField2 =Sample DatadataField3 =Sample Data>< / fx:Object>
< / s:typicalItem>
< / s:DataGrid>

项目渲染器代码:

  override public function prepare(hasBeenRecycled:Boolean):void {
var columnString:String = data [value1] +:+ data [value2] +:+ data [value3];

lblData.text = columnString;
}

排序比较功能:

  private function sortCompareFunc(obj1:Object,obj2:Object,col:GridColumn):int {
var obj1String:String = obj1 [value1] +: + obj1 [value2] +:+ obj1 [value3];
var obj2String:String = obj2 [value1] +:+ obj2 [value2] +:+ obj2 [value3];

var collat​​or:SortingCollat​​or = new SortingCollat​​or();

return collat​​or.compare(obj1String,obj2String);
}


解决方案

自己似乎火花网格控件需要一个dataField定义,即使你有一个自定义排序比较功能,只要尝试添加dataField =value1在你的第4列,即使你不使用它,看看是否有帮助。 >

I'm having a strange problem.

In Flex 4, I have a Spark DataGrid and have both an item renderer and a sort compare function defined for one of the columns. Strangely, this column will not sort in descending order.

The data is originally not sorted. Clicking on the column header displays the "up" arrow and the data sorts in ascending order. However, clicking on the column header again does nothing. The "up" arrow stays and the data stays sorted in ascending order.

I have debugged through the code and found that column.sortDescending in the sort compare function is always false (should this be true when the a descending sort should happen?).

I have Googled this for a long while and searched on here but haven't found anything.

Anyone have any ideas?

Thanks in advance.

//Edit

Simple Example code:

CreationComplete function initializes data using some random values:

protected function application1_creationCompleteHandler(event:FlexEvent):void
            {
                arrayData = new ArrayCollection();

                var obj:Object;
                for(var i:Number=0; i < 10; i++) {
                    obj = new Object();
                    obj.value1 = i;
                    obj.value2 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;
                    obj.value3 = Math.floor(Math.random() * (1 + 100 - 1)) + 1;

                    arrayData.addItem(obj);
                }
            }

Datagrid defines columns with 4th column having an item renderer and sort compare function defined.

<s:DataGrid x="122" y="142" width="391" height="223" requestedRowCount="4" dataProvider="{arrayData}">
        <s:columns>
            <s:ArrayList>
                <s:GridColumn dataField="value1" headerText="Value 1"></s:GridColumn>
                <s:GridColumn dataField="value2" headerText="Value 2"></s:GridColumn>
                <s:GridColumn dataField="value3" headerText="Value 3"></s:GridColumn>
                <s:GridColumn headerText="Value 3" sortable="true" itemRenderer="ItemRendererTest" sortCompareFunction="sortCompareFunc"></s:GridColumn>
            </s:ArrayList>
        </s:columns>
        <s:typicalItem>
            <fx:Object dataField1="Sample Data" dataField2="Sample Data" dataField3="Sample Data"></fx:Object>
        </s:typicalItem>
    </s:DataGrid>

Item renderer code:

override public function prepare(hasBeenRecycled:Boolean):void {
                var columnString:String = data["value1"] + ":" + data["value2"] + ":" + data["value3"];

                lblData.text = columnString;
            }

Sort compare function:

private function sortCompareFunc(obj1:Object, obj2:Object, col:GridColumn):int {
                var obj1String:String = obj1["value1"] + ":" + obj1["value2"] + ":" + obj1["value3"];
                var obj2String:String = obj2["value1"] + ":" + obj2["value2"] + ":" + obj2["value3"];

                var collator:SortingCollator = new SortingCollator();

                return collator.compare(obj1String, obj2String);
            }

解决方案

Just had something similar to this myself seems that the spark grid control needs a dataField defining even though you have a custom sort compare function, simply try adding dataField="value1" on your 4th column even though your not going to use it, see if that helps.

这篇关于Flex DataGrid列排序不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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