R Shiny DT - 用表格编辑表中的值

Vla*_*lad 8 r shiny dt

是否可以通过编辑DT :: DataTable来更新被动数据源?下面的代码是基于这个代码的变化,x被激活了.尝试在observeEvent中更改x时,问题就开始了.

有x反应的目的是我打算从外部数据库中获取它,然后编辑DT :: DataTable写回数据库,以便它与用户看到的内容保持同步(我很好那 - 它不是问题的一部分).

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    DTOutput('x1')
  ),
  server = function(input, output, session) {
    x = reactive({
      df <- iris
      df$Date = Sys.time() + seq_len(nrow(df))
      df
    })
    output$x1 = renderDT(x(), selection = 'none', editable = TRUE)

    proxy = dataTableProxy('x1')

    observeEvent(input$x1_cell_edit, {
      info = input$x1_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value

      # problem starts here
      x()[i, j] <<- isolate(DT::coerceValue(v, x()[i, j])) 
      replaceData(proxy, x(), resetPaging = FALSE)  # important
    })
  }
)
Run Code Online (Sandbox Code Playgroud)

SeG*_*eGa 12

我不确定我是否理解正确,但也许这个解决方案可能对你有所帮助.我将您的被动变为reactiveValues对象,并删除了replaceData行.

library(shiny)
library(DT)
shinyApp(
  ui = fluidPage(
    DTOutput('x1'),
    verbatimTextOutput("print")
  ),
  server = function(input, output, session) {
    x = reactiveValues(df = NULL)

    observe({
      df <- iris
      df$Date = Sys.time() + seq_len(nrow(df))
      x$df <- df
    })

    output$x1 = renderDT(x$df, selection = 'none', editable = TRUE)

    proxy = dataTableProxy('x1')

    observeEvent(input$x1_cell_edit, {
      info = input$x1_cell_edit
      str(info)
      i = info$row
      j = info$col
      v = info$value

      # problem starts here
      x$df[i, j] <- isolate(DT::coerceValue(v, x$df[i, j]))
    })

    output$print <- renderPrint({
      x$df
    })
  }
)
Run Code Online (Sandbox Code Playgroud)


小智 5

如果您没有在 DT 中显示行名称,那么您应该添加 1info$col以获得正确的列,即j = info$col + 1.