Группировка Коллекция отделяющая числовой 5 от Строки "5" - PullRequest
2 голосов
/ 08 апреля 2010

BackGround: У меня есть расширенная сетка данных. Поставщик данных для этого ADG - ArrayCollection. Существует группировка коллекции в поле идентификатора этого AC.

Пример пары элементов в этом AC, имя переменной AC - "arcTemplates":

(mx.collections::ArrayCollection)#0
  filterFunction = (null)
  length = 69
  list = (mx.collections::ArrayList)#1
    length = 69
    source = (Array)#2
      [0] (Object)#3
        abbreviation = "sore-throat"
        insertDate = "11/16/2009"
        name = "sore throat"
        templateID = 234
        templateType = "New Problem"
        templateTypeID = 1
     [32] (Object)#35
        abbreviation = 123
        insertDate = "03/08/2010"
        name = 123
        templateID = 297
        templateType = "New Problem"
        templateTypeID = 1
     [55] (Object)#58
        abbreviation = 1234
        insertDate = "11/16/2009"
        name = 1234
        templateID = 227
        templateType = "Exam"
        templateTypeID = 5
     [56] (Object)#59
        abbreviation = "breast only"
        insertDate = "03/15/2005"
        name = "breast exam"
        templateID = 195
        templateType = "Exam"
        templateTypeID = 5

Пример кода Flex, ведущего к группировке:

<mx:AdvancedDataGrid displayItemsExpanded="true" id="gridTemplates">
  <mx:dataProvider>
    <mx:GroupingCollection id="gc" source="{arcTemplates}">
      <mx:Grouping >
        <mx:GroupingField name="templateTypeID" compareFunction="gcSort">

Функция сортировки GC: * ​​1011 *

public function gcSort(a:Object, b:Object):int{
    return ObjectUtil.stringCompare(String(a.templateTypeID + a.name).toLowerCase(), 
                                    String(b.templateTypeID + b.name).toLowerCase());
}

Проблема: В моем примере с AC есть несколько элементов, элементы 0, 32 и 56 правильно отсортированы и сгруппированы по их templateTypeID, но элемент 55 делает что-то странное. Кажется, сортировать / группировать по числовой 5 вместо строки "5". Получает незнакомец. Если я изменяю свойство name, чтобы оно содержало текст (например, 1234x), оно корректно сортирует / группирует строку «5»

Вопрос: Что здесь происходит и как мне это исправить?

1 Ответ

2 голосов
/ 09 апреля 2010

Если я доверяю вашему следу, вы видите, что name=1234 написан без кавычек, поэтому он считается Number.

Когда вы делаете в вашем gcSort String(a.templateTypeID + a.name), вы фактически добавляете два числа (5+1234) и конвертируете их обратно в String => "1239".

Что вы можете сделать, это сначала преобразовать ваше имя в строку, а затем выполнить конкатенацию:

(a.templateTypeID + a.name.toString()).toLowerCase()
...