Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex Flex AdvancedDataGrid自定义排序问题_Apache Flex_Sorting_Collections_Adobe_Advanceddatagrid - Fatal编程技术网

Apache flex Flex AdvancedDataGrid自定义排序问题

Apache flex Flex AdvancedDataGrid自定义排序问题,apache-flex,sorting,collections,adobe,advanceddatagrid,Apache Flex,Sorting,Collections,Adobe,Advanceddatagrid,我有一个高级的datagrid,我正在实现一个自定义排序。我的adv.data网格在每次后续排序时都会变慢……如果节点被打开,它就会超时 我的数据如下所示(g=grp on ID)* 当我按F_名称或L_名称排序时,排序数组集合应按如下方式排序和显示数据(g=grp on ID)*: 为此,我使用了一个排序事件,如下所示 protected function adg1_headerReleaseHandler(event:AdvancedDataGridEvent):void { event.

我有一个高级的datagrid,我正在实现一个自定义排序。我的adv.data网格在每次后续排序时都会变慢……如果节点被打开,它就会超时

我的数据如下所示(g=grp on ID)*

当我按F_名称或L_名称排序时,排序数组集合应按如下方式排序和显示数据(g=grp on ID)*:

为此,我使用了一个排序事件,如下所示

protected function adg1_headerReleaseHandler(event:AdvancedDataGridEvent):void
{
 event.preventDefault();

 sort_dir = !sort_dir;
 var sort:Sort = new Sort();
 sort.fields = [new SortField(event.dataField, true,sort_dir),new SortField('ID', true,sort_dir)]  
 _ds.sort = sort;
 _ds.refresh();

 adg1.dataProvider = null;
 var previousRegId:int = 0;
 var counter:int = 0;

 for each (var item:DueInVO in _ds) {
  if (previousRegId != item.ID) {
   counter++;
   previousRegId = item.ID
  }
  item.uid = counter;
 }

 /*
 var previousRegId:int = 0;
 var counter:int = 0;
 var csr:IViewCursor = DataSource.createCursor();
 while(!csr.afterLast){
  if (previousRegId != csr.current.registration_id) {
   counter++;
   previousRegId = csr.current.registration_id
  }

  csr.current.uid = counter;
  csr.moveNext();
 }
 */
 setGrouping(['uid']);
 //csr = null;
}
setGrouping函数如下所示:

protected function setGrouping(columnNames:Array):void{
 var _groupingColumns:Array = [];
 var gc:GroupingField;
 if (columnNames.length > 0) {
  var _groupedData:GroupingCollection2 = new GroupingCollection2();
  var _grouping:Grouping = new Grouping();

  for (var i:int=0;i<columnNames.length;i++) {
   gc = new GroupingField(columnNames[i]);
   //gc.numeric = true;
   //gc.compareFunction = compareFunc;
   //gc.groupingFunction = groupFunc;
   _groupingColumns.push(gc);

  }
  _groupedData.source = _ds;
  _grouping.fields = _groupingColumns;
  _groupedData.grouping = _grouping
  _groupedData.refresh();
  adg1.dataProvider = _groupedData;
 } else {
  adg1.dataProvider = _ds;
 }
}
protected function setGrouping(列名称:数组):void{
var _groupingColumns:Array=[];
var-gc:GroupingField;
如果(columnNames.length>0){
var_groupedData:GroupingCollection2=新的GroupingCollection2();
变量_分组:分组=新分组();

对于(var i:int=0;i不必这样做,您只需为ADG列提供一个标题。您不必捕获标题单击事件和所有这些。您已经完成了。您所要做的就是指定特定列的比较结果。

我明白了!…感谢您为我指出了正确的方向。Th在我的例子中,您的建议的问题是我从配置文件生成列,所以我可以使这个网格组件可重用。因此: 1.我正在使用labelFunction 2.column.sortCompareFunction=myfunc回调根本无法从Adobe API文档中引用

但是,正如您所说,我正在编写复杂的代码。我需要将gc.compareFunction=myCompare;添加到以下代码中(从上面进行比较):

受保护的函数集分组(列名称:数组):void{ _分组列=[]

            if (columnNames.length > 0) {
                _groupedData = new GroupingCollection2();

                _grouping = new Grouping();

                for (var i:int=0;i<columnNames.length;i++) {
                    var gc:GroupingField = new GroupingField(columnNames[i]);
                    gc.descending = _sort_direction;

                    gc.compareFunction = myCompare;

                    _groupingColumns.push(gc);

                }
                _groupedData.source = _ds;
                _grouping.fields = _groupingColumns;
                _groupedData.grouping = _grouping
                _groupedData.refresh();
                _data = _groupedData;
            } else {
                _data = _ds;
            }

            setGridColumns();
        }
我希望这对别人有帮助!
AAP

对列中的数据进行排序时调用的回调函数。如果未指定此属性,排序将尝试对数据使用基本字符串或数字排序。如果数据不是字符串或数字,或者如果dataField属性不是数据提供程序的有效属性,则排序不起作用或将生成异常。I如果指定labelFunction属性的值,还必须向sortCompareFunction属性提供一个函数,除非此列不允许排序。sortCompareFunction将两个对象作为其参数。这些对象可以是任何对象,并且该函数的代码负责确定对象的哪个属性比较以及如何比较。数据绝对不必是字符串或数字。
protected function setGrouping(columnNames:Array):void{
 var _groupingColumns:Array = [];
 var gc:GroupingField;
 if (columnNames.length > 0) {
  var _groupedData:GroupingCollection2 = new GroupingCollection2();
  var _grouping:Grouping = new Grouping();

  for (var i:int=0;i<columnNames.length;i++) {
   gc = new GroupingField(columnNames[i]);
   //gc.numeric = true;
   //gc.compareFunction = compareFunc;
   //gc.groupingFunction = groupFunc;
   _groupingColumns.push(gc);

  }
  _groupedData.source = _ds;
  _grouping.fields = _groupingColumns;
  _groupedData.grouping = _grouping
  _groupedData.refresh();
  adg1.dataProvider = _groupedData;
 } else {
  adg1.dataProvider = _ds;
 }
}
            if (columnNames.length > 0) {
                _groupedData = new GroupingCollection2();

                _grouping = new Grouping();

                for (var i:int=0;i<columnNames.length;i++) {
                    var gc:GroupingField = new GroupingField(columnNames[i]);
                    gc.descending = _sort_direction;

                    gc.compareFunction = myCompare;

                    _groupingColumns.push(gc);

                }
                _groupedData.source = _ds;
                _grouping.fields = _groupingColumns;
                _groupedData.grouping = _grouping
                _groupedData.refresh();
                _data = _groupedData;
            } else {
                _data = _ds;
            }

            setGridColumns();
        }
protected function adg1_sortHandler(event:AdvancedDataGridEvent):void
            {
                _sortField = event.dataField;
                if (temp.length == 0) {
                    temp.push(DefaultGroupColumn);
                } 

                setGrouping(temp)
                _sort_direction = !_sort_direction;