2017-05-05 39 views
1

我目前正在试图限制我在一个DataTable中闪亮的选择只有两行 - 我想让表不允许用户点击超过行(但也有之后可以取消选择)。限制DT表中的行选择

library(DT) 
shinyApp(
    ui = fluidPage(
    fluidRow(
     column(12, 
      dataTableOutput('table') 
    ) 
    ) 
), 
    server = function(input, output) { 
    output$table <- DT::renderDataTable(iris, 
            options = list(selection = "multiple") 
    ) 
    } 
) 

行选择目前在多模式,它的工作原理,但我不希望选择超过两行。

+2

您可以使用DT中的选项将行选择模式设置为单个或多个模式。检查DT文件。要限制2行,您需要编写一些代码来观察行选择事件,并根据需要取消选择额外的行。 DT的大量文档涵盖了所有这些主题,包括示例和代码示例,尽管它可能有点散乱。 – dracodoc

回答

1

您既可以通过JavaScript,你可能已经看到解决这个问题: Limit row selection to 3 in datatables

或者你更新闪亮的数据表:

library(DT) 
library(shiny) 
shinyApp(
    ui = fluidPage(
    fluidRow(
     column(12,dataTableOutput('tbl')) 
    ) 
), 
    server = function(input, output) { 
    reset <- reactiveValues(sel = "") 
    output$tbl <- DT::renderDataTable({ 
     input$tbl_rows_selected 
     datatable(iris, selection = list(mode = 'multiple', selected = reset$sel)) 
    }) 

    observe({ 
     if(length(input$tbl_rows_selected) > 2){ 
     reset$sel <- setdiff(input$tbl_rows_selected, input$tbl_row_last_clicked) 
     }else{ 
     reset$sel <- input$tbl_rows_selected 
     } 
    }) 
    } 
) 

这种解决方案可能不太干净,但有点更容易理解。

+0

谢谢你的回答!我试图快速运行你的代码,但是当我直接将它放入R中时,它不起作用。尽管如此,我会尝试你推荐的方法 - 看起来它应该完成这项工作。再一次,谢谢你! –

+0

好吧,我只是再试一次,对我来说它工作。你是否安装了DT?'它是否提供任何错误信息? – BigDataScientist

+0

是的,我已经安装了DT包。它运行,但它提供了一个空白的用户界面。尽管如此,我在我的主应用程序中实现了它,一切正常。 –