2

在数据表中,一些值应该根据是否选择相应的行而改变。让我头疼的是:当数据更新时,表格被重写,选择消失了。

我已经为这个挑战工作了几个小时,但还没有找到解决方案。大多数时候我在stackoverflow上找到了我的问题的解决方案,但这次我没有。

在下面的示例中,最后一列应该显示行的选择状态。我试图跟踪选定的行并在重写表时预先选择它们。但我不知道如何使它工作;该代码不起作用,但(希望)显示我需要什么。

library(shiny)
library(DT)
mymtcars = mtcars[1:5, 1:2]

runApp(
     list(ui = fluidPage(DT::dataTableOutput("mytable")),

     server = function(input, output, session) {
       rowSelect <- reactive({
           a <- rep(FALSE,5)
           a[input$mytable_rows_selected] <- TRUE
           return( a ) 
       })

       output$mytable = DT::renderDataTable(
           cbind(mymtcars, v=rowSelect()),
           options = list(dom="t",
                          ordering=FALSE),
           selection=list(mode='multiple',
                          selected=(1:5)[rowSelect()],
                          target='row')
       )
   })
)

顺便说一句,一个不太优雅但也可能的方法是添加一列复选框,而不是数据表行选择机制。我也尝试过,但遇到了类似的问题。一切都按照我想要的方式进行,直到我将反应列添加到我的数据中。

4

1 回答 1

1

You almost got it right! You have to put wrap your table with datatable:

output$mytable <- DT::renderDataTable(
    datatable(cbind(mymtcars, v=rowSelect()),
              options = list(dom = "t",ordering = FALSE),
              selection = list(mode = "multiple",
                               selected =(1:5)[rowSelect()],
                               target = "row"))
)

enter image description here

于 2017-09-22T23:28:26.917 回答