将可编辑DT与“添加行”功能相结合

问题描述 投票:0回答:1

我正在尝试解决两个特定需求:

  • 用户需要能够向数据表添加一行
  • 数据表需要可编辑

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

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

我希望有人可以帮助我结合这两个要求!

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)
r shiny dt
1个回答
4
投票

编辑后,您将需要使用

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)
})
© www.soinside.com 2019 - 2024. All rights reserved.