Как добавить класс в ячейку в SlickGrid - PullRequest
11 голосов
/ 30 апреля 2010

У кого-нибудь есть идеи, как добавить класс "myClass" в какую-то ячейку (например, строку 5, столбец 3) в SlickGrid?

Ответы [ 10 ]

11 голосов
/ 30 апреля 2010

Чтобы добавить определенный класс CSS к некоторым строкам, используйте параметр «rowClasses», добавленный недавно в http://github.com/mleibman/SlickGrid/commit/26d525a136e74e0fd36f6d45f0d53d1ce2df40ed

Вы не можете добавить класс CSS к определенной ячейке, только ко всем ячейкам в данном столбце - используйте свойство "cssClass" в определении столбца.

Возможно, вы можете использовать комбинацию этих двух. Другой способ - поместить внутренний DIV в ячейку с помощью специального средства форматирования и установить там класс. Поскольку у вас есть доступ к строке / ячейке в программе форматирования, вы можете решить, как ее отобразить.

6 голосов
/ 23 августа 2013

Теперь есть лучший способ сделать это, который позволяет вам обращаться к произвольным отдельным ячейкам:

https://github.com/mleibman/SlickGrid/wiki/Slick.Grid#wiki-setCellCssStyles

5 голосов
/ 30 апреля 2010

..

$('.slick-cell').addClass('myClass'); // adds "myClass" to all cells...

..

$('.slick-row[row=1] .slick-cell[cell=1]').addClass('myClass'); // adds "myClass" to 2nd column of the 2nd row...

примечание : строки и столбцы имеют индекс, начинающийся с нуля ...

1 голос
/ 12 апреля 2016

Я хочу изменить цвет фона в большом количестве ячеек в зависимости от значения в ячейке. Я хочу рассчитать стиль по значению, когда отображается ячейка, а не заранее. asyncPostRender слишком медленно. Я не хочу менять код SlickGrid.

Мне удалось установить стиль ячейки на основе значения с помощью пользовательского средства форматирования, setTimeout и функции grid.getCellNode (строка, ячейка) . setTimeout необходим для того, чтобы мы могли установить стиль ячейки после добавления ячеек в DOM.

Вот пример, основанный на примере # 1 SlickGrid. Ячейки % Complete закрашены красным, когда <= 25% завершено, и зеленым, когда> = 75% завершены, в противном случае - желтым. В этом примере используются пользовательские стили CSS, но также возможно добавить класс CSS в каждую ячейку. SlickGrid реализует свои ячейки как элементы div, а не как элементы td. Пример также демонстрирует передачу «сетки» в форматтер, используя замыкание и явную инициализацию. Это необходимо, если у вас есть несколько сеток на одной странице. Извините, пример не очень короткий!

Вот тот же пример в JSFiddle .

var grid;

var post_format_timeout;
var post_format_cells = [];

function highlight_completion(grid, row, cell, value, cellNode) {
  var $c = $(cellNode);
  if (value <= 25)
      col = '#ff8080';
  else if (value >= 75)
      col = '#80ff80';
  else
      col = '#ffff80';
  $c.css('background-color', col);
}

function post_format() {
  var n = post_format_cells.length;
  for (var i=0; i<n; ++i) {
    var info = post_format_cells[i];
    var grid = info[0];
    var row = info[1];
    var cell = info[2];
    var value = info[3];
    var highlight_fn = info[4];
    var cellNode = grid.getCellNode(row, cell);
    highlight_fn(grid, row, cell, value, cellNode);
  }
  post_format_timeout = null;
  post_format_cells = [];
}

function post_format_push(info) {
  if (!post_format_timeout) {
    post_format_timeout = setTimeout(post_format, 0);
    post_format_cells = [];
  }
  post_format_cells.push(info);
}

function format_completion(grid, row, cell, value, colDef, dataContext) {
  post_format_push([grid, row, cell, value, highlight_completion]);
  return grid.getOptions().defaultFormatter(row, cell, value, colDef, dataContext);
}

$(function () {
  var data = [];
  for (var i = 0; i < 500; i++) {
    data[i] = {
      title: "Task " + i,
      duration: "5 days",
      percentComplete: Math.round(Math.random() * 100),
      start: "01/01/2009",
      finish: "01/05/2009",
      effortDriven: (i % 5 == 0)
    };
  }

  var my_format_completion = function(row, cell, value, colDef, dataContext) {
    return format_completion(grid, row, cell, value, colDef, dataContext);
  }

  var columns = [
    {id: "title", name: "Title", field: "title"},
    {id: "duration", name: "Duration", field: "duration"},
    {id: "%", name: "% Complete", field: "percentComplete", formatter: my_format_completion},
    {id: "start", name: "Start", field: "start"},
    {id: "finish", name: "Finish", field: "finish"},
    {id: "effort-driven", name: "Effort Driven", field: "effortDriven"}
  ];

  var options = {
    enableCellNavigation: true,
    enableColumnReorder: false,
    explicitInitialization: true
  };

  grid = new Slick.Grid("#myGrid", data, columns, options);
  grid.init();
});
<link rel="stylesheet" href="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/slick.grid.css" type="text/css"/>
<link rel="stylesheet" href="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/css/smoothness/jquery-ui-1.11.3.custom.css" type="text/css"/>
<link rel="stylesheet" href="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/examples/examples.css" type="text/css"/>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/lib/jquery.event.drag-2.2.js"></script>
<script src="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/slick.core.js"></script>
<script src="https://cdn.rawgit.com/6pac/SlickGrid/2.2.6/slick.grid.js"></script>

<div id="myGrid" style="width:500px; height:180px;"></div>
1 голос
/ 22 июля 2015

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

$(getCellNode(RowNumber, ColumnNumber)).addClass("ClassName");

пример:

$(getCellNode(5, 3)).addClass("invalid");
1 голос
/ 09 июня 2010

Ответ Тина, но теперь он называется rowCssClasses (и вызывается с неопределенным значением несколько раз в дополнение ко всем обычным строкам по какой-то причине; я сделал

if(row == undefined){ return '' }

только для того, чтобы пройти через это.

0 голосов
/ 24 января 2018

По ссылке, опубликованной Olleicua:

Предположим, у вас есть сетка со столбцами:

["логин", "имя", "день рождения", "возраст", "likes_icecream", "favour_cake"]

... и вы хотели бы выделить столбцы «день рождения» и «возраст» для людей, чей день рождения сегодня, в данном случае, строки с индексами 0 и 9. (Первая и десятая строки в сетке) .

.highlight{ background: yellow } 

 grid.setCellCssStyles("birthday_highlight", {
 0: {
    birthday: "highlight", 
    age: "highlight" 
   },

  9: {
     birthday: "highlight",
     age: "highlight"
   }

})

0 голосов
/ 15 июля 2013

Лучший способ, который я нашел, - добавить свойство asyncPostRender в средство форматирования столбцов. Это позволяет вам указать функцию, которая будет вызываться асинхронно после визуализации ячейки. В этой функции у вас есть доступ к ячейке и данным строки. Это действует для отдельной ячейки, а не для всего столбца ячеек.

var columns = [
   { 
       id:'customer', 
       name:'Customer', 
       asyncPostRender: myObject.styleCustCell 
   }
];

myObject.styleCustCell = function(cellNode, row, rowData, columnsObject) {
    $(cellNode).addClass('myCustomerCssClass');
};
0 голосов
/ 07 февраля 2013

Как упоминалось ранее, вы можете использовать свойство cssClass, чтобы добавить класс CSS во все ячейки столбца (кроме заголовка). cssClass - это строковое свойство, но вы можете немного изменить код скользящей сетки, чтобы он вместо этого вел себя как функция / строка, а затем вы можете добавить условные классы в отдельные ячейки. Вот пример (SlickGrid v2.1)

// Изменить функцию appendCellHtml и заменить

var cellCss = "slick-cell l" + cell + " r" + Math.min(columns.length - 1, cell + colspan - 1) +
      (m.cssClass ? " " + m.cssClass : "");

с

 var cssClass = $.isFunction(m.cssClass) ? m.cssClass(row, cell, null /* or value */, m, d) : m.cssClass;
  var cellCss = "slick-cell l" + cell + " r" + Math.min(columns.length - 1, cell + colspan - 1) +
      (cssClass ? " " + cssClass : "");

, а затем использовать cssClass точно так же, как форматер.

0 голосов
/ 30 апреля 2010

Попробуйте что-то вроде этого:

$(function(){
 $('#element_id tr:eq(4)', '#element_id tr td:eq(2)').addClass('myClass');
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...