Ag сортировка сетки не происходит, когда есть пустое поле - PullRequest
0 голосов
/ 23 апреля 2020

у меня есть таблица сетки ag с 10 столбцами, и для всех столбцов по всему миру я включаю сортировку, как показано ниже,

enableSorting= "true"
внутри <ag-grid-angular.

У одного из наших столбцов есть атрибут date, и он также содержит несколько пустых значений. Для обычного списка он сортируется должным образом, но когда дело доходит до списка с пустым значением, он не сортируется должным образом.

Можно ли как-нибудь ограничить пустое значение концом списка?

Ответы [ 2 ]

1 голос
/ 26 апреля 2020

Вы можете передать пользовательский компаратор в свой столбец даты следующим образом:

  {
    field: 'date',
    comparator: dateComparator,
  },

И определить пользовательский компаратор, чтобы сохранить нулевые значения в последний раз

function dateComparator(date1, date2, nodeA, nodeB, isInverted) {
  if (date1 === null && date2 === null) {
    return 0;
  }
  if (date1 === null) {
    return isInverted ? 1 : -1;
  }
  if (date2 === null) {
    return isInverted ? 1 : -1;
  }
  return date1 - date2;
}

Это должно работать, если ваш даты передаются как даты в ag-grid. Вы можете следовать этому примеру , если даты передаются в виде строк.

0 голосов
/ 27 апреля 2020

Наконец я смог найти способ для выше. С помощью пользовательского компаратора, вот фрагменты.

dateComparator(date1, date2) {
  if(!date1){
    date1 = '04/23/2300';
  } else if(!date2){
    date2 = '05/23/2300';
  }
  if (date1 === undefined || date1 === null || date1.length !== 10) {
    return null;
  }
  else{
    var yearNumber = date1.substring(6, 10);
    var dayNumber  = date1.substring(3, 5);
    var  monthNumber = date1.substring(0, 2);
    var result = yearNumber * 10000 + monthNumber * 100 + dayNumber;
    var date1Number = result;
  }
  if (date2 === undefined || date2 === null || date2.length !== 10) {
    return null;
  }
  else{
    var yearNumber2 = date2.substring(6, 10);
    var dayNumber2  = date2.substring(3, 5);
    var  monthNumber2 = date2.substring(0, 2);
    var result2 = yearNumber2 * 10000 + monthNumber2 * 100 + dayNumber2;
    var date2Number = result2;
  }
  // var date1Number = this.monthToComparable(date1);
  // var date2Number = this.monthToComparable(date2);
  if (date1Number === null && date2Number === null) {
    return null;
  }
  if (date1Number === null) {
    return -1;
  }
  if (date2Number === null) {
    return 1;
  }
  return Number(date1Number)- Number(date2Number);
}
...