编辑表时如何使用数据表在闪亮表中创建下拉列表?

Posted

技术标签:

【中文标题】编辑表时如何使用数据表在闪亮表中创建下拉列表?【英文标题】:How to create a dropdown list in a Shiny table using datatable when editing the table? 【发布时间】:2020-07-04 19:22:59 【问题描述】:

我使用 RStudio 读取一个 csv 文件并使用 Shiny 构建一个应用程序作为交互式表格,我现在选择的单元格如图所示是预先填充的。

enter image description here

我想更改下拉列表中给定预定义选项的值,例如“保留数据集”、“通过”等,我搜索了数百种材料,但我真的用完了我的子弹...... ...请帮忙!

【问题讨论】:

你想在列的所有单元格中使用相同的下拉列表吗? 是的,可以,你能详细说明一下吗?非常感谢!!! 这是 ***.com/questions/52593539/… 的副本,但 Stephane Laurent 在这里给出了一个绝妙的答案,而另一个问题没有答案。 【参考方案1】:

我们可以使用 javascript 库 CellEdit 做到这一点。下载文件dataTables.cellEdit.js。

默认情况下,界面不是很时尚。要设置样式,请复制下面的 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

查看实际操作:

查看CellEdit repo 上的可能选项。特别是,您可以禁用某些列的编辑,并且您可以根据需要摆脱“确认/取消”按钮。

【讨论】:

非常感谢!是否可以不引用外部文件“CellEdit.js”?是否可以在 DT 中使用回调,如果他/她想使用这个应用程序,下载一个额外的文件对于第三个文件会更复杂,但我知道我们是否必须这样做......

以上是关于编辑表时如何使用数据表在闪亮表中创建下拉列表?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Flutter 中创建自定义下拉列表?

在Oracle 11g 中创建表时如何保存表?

如何在数据来自 API 的颤动中创建下拉列表?

如何在 HTML/Javascript 中创建可编辑的组合框?

使用 create-hive-table 在 Hive 中创建表时如何使用自定义分隔符

如何在HTML / Javascript中创建可编辑的组合框?