r - 将可编辑 DT 与 `add row` 功能相结合

标签 r shiny datatables

我正在尝试解决两个特定需求:
- 用户需要能够向 DataTable 添加一行
- 数据表需要可编辑

目前,我设置了“添加行”功能以及可编辑功能,但编辑不会保留表格排序或添加新行时。

当您运行以下代码时,请注意如何添加/删除行,但是当您编辑一个字段然后添加/删除一行时,您将丢失所做的编辑。

希望有人能帮我把这两个需求结合起来!感谢您的帮助。

this_table = data.frame(bins = c(30, 50), cb = c(T, F))
ui <- fluidPage(

  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30),
      checkboxInput("cb", "T/F"),
      actionButton("add_btn", "Add"),
      actionButton("delete_btn", "Delete")
    ),

    mainPanel(
      DTOutput("shiny_table")
    )
  )
)

server <- function(input, output) {

  this_table <- reactiveVal(this_table)

  observeEvent(input$add_btn, {
    t = rbind(data.frame(bins = input$bins,
                         cb = input$cb), this_table())
    this_table(t)
  })

  observeEvent(input$delete_btn, {
    t = this_table()
    print(nrow(t))
    if (!is.null(input$shiny_table_rows_selected)) {
      t <- t[-as.numeric(input$shiny_table_rows_selected),]
    }
    this_table(t)
  })

  output$shiny_table <- renderDT({
    datatable(this_table(), selection = 'single', options = list(dom = 't'), editable = T)
  })
}

shinyApp(ui = ui, server = server)

最佳答案

您需要使用 observeEvent 在编辑后更新表格数据。您可以从 input$shiny_table_cell_edit 中提取相关表格行、列和新编辑的值。尝试将此代码添加到您的服务器功能:

observeEvent(input$shiny_table_cell_edit, {
    info <- input$shiny_table_cell_edit
    edit_row <-  info$row
    edit_col <-  info$col   
    edit_value <-  info$value

    t = this_table()
    t[edit_row,edit_col] <- edit_value
    this_table(t)
})

关于r - 将可编辑 DT 与 `add row` 功能相结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57581690/

相关文章:

r - 优化 sapply() 或 for()、paste(),以有效地将稀疏三元组矩阵转换为 libsvm 格式

r - 在ggplot2中自定义facets的背景颜色

r - 在 Shiny UI 中动态显示上传的图像

r - 将一些 Shiny 的应用程序组合到一个 Shiny 的仪表板上

css - 增加 Shiny 应用程序中操作按钮的长度

javascript - JQuery 更改数据表的属性

r - 矩阵用一填充零行

r - Link R Shiny select输入项打开文件actionButton

JQuery DataTables - JQuery UI 主题,箭头包裹在大腿上

jquery - 通过单击行内的按钮访问数据表中的数据