Shiny - checkbox in table in shiny

后端 未结 1 1016
梦谈多话
梦谈多话 2020-12-10 08:44

i\'ve read and implemented checkbox in table in shiny from link . but when i run in R, the output in column is

1条回答
  •  醉梦人生
    2020-12-10 09:17

    You can use DT with , escape = FALSE see

    library(shiny)
    library(DT)
    mymtcars = mtcars
    mymtcars$id = 1:nrow(mtcars)
    runApp(
      list(ui = pageWithSidebar(
        headerPanel('Examples of DataTables'),
        sidebarPanel(
          checkboxGroupInput('show_vars', 'Columns to show:', names(mymtcars),
                             selected = names(mymtcars))
          ,textInput("collection_txt",label="Foo")
        ),
        mainPanel(
          DT::dataTableOutput("mytable")
        )
      )
      , server = function(input, output, session) {
        rowSelect <- reactive({
          paste(sort(unique(input[["rows"]])),sep=',')
        })
        observe({
          updateTextInput(session, "collection_txt", value = rowSelect() ,label = "Foo:" )
        })
        output$mytable = DT::renderDataTable({
          addCheckboxButtons <- paste0('',"")
          #Display table with checkbox buttons
          DT::datatable(cbind(Pick=addCheckboxButtons, mymtcars[, input$show_vars, drop=FALSE]),
                        options = list(orderClasses = TRUE,
    lengthMenu = c(5, 25, 50),
    pageLength = 25, 
    callback = JS("function(table) {
        table.on('change.dt', 'tr td input:checkbox', function() {
              setTimeout(function () {
              Shiny.onInputChange('rows', $(this).add('tr td input:checkbox:checked').parent().siblings(':last-child').map(function() {
              return $(this).text();
              }).get())
              }, 10); 
              });
              }")),escape = FALSE,
    
                        )
        } 
        )
      }
      )
    )
    

    update

    Make in other way using shinyinput

    library(shiny)
    library(DT)
    mymtcars = mtcars
    mymtcars$id = 1:nrow(mtcars)
    runApp(
      list(ui = pageWithSidebar(
        headerPanel('Examples of DataTables'),
        sidebarPanel(
          checkboxGroupInput('show_vars', 'Columns to show:', names(mymtcars),
                             selected = names(mymtcars))
          ,textInput("collection_txt",label="Foo")
        ),
        mainPanel(
          DT::dataTableOutput("mytable")
        )
      )
      , server = function(input, output, session) {
    
        shinyInput <- function(FUN,id,num,...) {
          inputs <- character(num)
          for (i in seq_len(num)) {
            inputs[i] <- as.character(FUN(paste0(id,i),label=NULL,...))
          }
          inputs
        }
    
        rowSelect <- reactive({
    
          rows=names(input)[grepl(pattern = "srows_",names(input))]
          paste(unlist(lapply(rows,function(i){
            if(input[[i]]==T){
              return(substr(i,gregexpr(pattern = "_",i)[[1]]+1,nchar(i)))
            }
          })))
    
        })
    
        observe({
          updateTextInput(session, "collection_txt", value = rowSelect() ,label = "Foo:" )
        })
        output$mytable = DT::renderDataTable({
          #Display table with checkbox buttons
        DT::datatable(cbind(Pick=shinyInput(checkboxInput,"srows_",nrow(mymtcars),value=NULL,width=1), mymtcars[, input$show_vars, drop=FALSE]),
                        options = list(orderClasses = TRUE,
                                       lengthMenu = c(5, 25, 50),
                                       pageLength = 25 ,
    
                                       drawCallback= JS(
                                         'function(settings) {
                                         Shiny.bindAll(this.api().table().node());}')
                                      ),selection='none',escape=F)
    
    
          } 
      )
    
    
        })
                        )
    

    0 讨论(0)
提交回复
热议问题