Как создать выпадающий список в таблице Shiny, используя datatable при редактировании таблицы? - PullRequest
0 голосов
/ 24 марта 2020

Я использовал RStudio для чтения в csv-файле и использовал Shiny для создания приложения в виде интерактивной таблицы, ячейка, которую я выбрал прямо сейчас, как показано на рисунке, уже заполнена.

enter описание изображения здесь

Я хочу изменить значение заданных предопределенных опций в раскрывающемся списке, таких как «Сохранить набор данных», «Пропустить» и т. д. c. Я искал сотни материалы и у меня буквально кончились пули ...... ПОЖАЛУЙСТА, ПОМОГИТЕ!

1 Ответ

0 голосов
/ 25 марта 2020

Мы можем сделать это с помощью библиотеки JavaScript CellEdit . Загрузите файл dataTables.cellEdit. js.

По умолчанию интерфейс не очень стильный sh. Чтобы стилизовать его, скопируйте приведенный ниже код CSS и поместите его в файл dataTables.cellEdit. css, в той же папке, что и dataTables.cellEdit. js.

.my-input-class {
  padding: 3px 6px;
  border: 1px solid #ccc;
  border-radius: 4px;
}

.my-confirm-class {
  padding: 3px 6px;
  font-size: 12px;
  color: white;
  text-align: center;
  vertical-align: middle;
  border-radius: 4px;
  background-color: #337ab7;
  text-decoration: none;
}

.my-cancel-class {
  padding: 3px 6px;
  font-size: 12px;
  color: white;
  text-align: center;
  vertical-align: middle;
  border-radius: 4px;
  background-color: #a94442;
  text-decoration: none;
}

Теперь вот код R. Не забудьте изменить переменную path.

library(DT)

dat <- data.frame(
  Action = c("Keep data", "Keep data", "Keep data"),
  X = c(1, 2, 3),
  Y = c("a", "b", "c")
)

callback = JS(
  "function onUpdate(updatedCell, updatedRow, oldValue){}",
  "table.MakeCellsEditable({",
  "  onUpdate: onUpdate,",
  "  inputCss: 'my-input-class',",
  "  confirmationButton: {",
  "    confirmCss: 'my-confirm-class',",
  "    cancelCss: 'my-cancel-class'",
  "  },",
  "  inputTypes: [",
  "    {",
  "      column: 0,",
  "      type: 'list',",
  "      options: [",
  "        {value: 'Keep data', display: 'Keep data'},",
  "        {value: 'Pass',      display: 'Pass'},",
  "        {value: 'Delete',    display: 'Delete'}",
  "      ]",
  "    }",
  "  ]",
  "});")

## the datatable
dtable <- datatable(
  dat, callback = callback, rownames = FALSE, 
  options = list(
    columnDefs = list(
      list(targets = "_all", className = "dt-center")
    )
  )
)
path <- "~/Work/R/DT" # folder containing the files dataTables.cellEdit.js
                      # and dataTables.cellEdit.css
dep <- htmltools::htmlDependency(
  "CellEdit", "1.0.19", path, 
  script = "dataTables.cellEdit.js", stylesheet = "dataTables.cellEdit.css")
dtable$dependencies <- c(dtable$dependencies, list(dep))
dtable

См. Это в действии:

enter image description here

См. Возможные варианты репозитория CellEdit . В частности, вы можете отключить редактирование для определенных столбцов, а также можете избавиться от кнопок «Подтвердить / Отменить», если хотите.

...