【问题标题】:column width using dt in a shiny app在闪亮的应用程序中使用 dt 的列宽
【发布时间】:2018-11-01 02:36:39
【问题描述】:

有没有办法防止表格在通过下拉菜单刷新数据后自行调整大小?

我知道这与R shiny - DT::renderDataTable column width 中的问题完全相同,但据我所知,这个问题从未得到充分回答。

library(shiny)
library(tidyr)
library(dplyr)
library(DT)

ui <- fluidPage(selectInput(inputId = "dayinput", 
                            label = "Day Filter", 
                            choices = c("Monday", "Tuesday","Wednesday")), 
                dataTableOutput("table1")
                )

server <- function(input, output) {

  output$table1 <- renderDataTable({
    price <- c("12", "11", "14")
    day <- c("Monday", "Tuesday", "Wednesday")
    df <- data.frame(price, day) %>% filter(day == input$dayinput)

    datatable(df, rownames = FALSE, class = 'cell-border stripe', 
              options = list(dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')),
                             autoWidth = TRUE, columnDefs = list(list(width = '50px', targets = "_all"))))
  })
}

shinyApp(ui =ui, server = server)

【问题讨论】:

    标签: r shiny dt column-width


    【解决方案1】:

    我想我乍一看就误解了这个问题。无论如何,我认为你可以通过一些 css 样式来实现。

    这只是一个小例子:

    library(shiny)
    library(tidyr)
    library(dplyr)
    library(DT)
    
    ui <- fluidPage(
      tags$head(
        tags$style(HTML(
          "
    #table1 {width: 250px !important}
    #DataTables_Table_0 td {width: 125px !important}
          "
        ))
        ),
      selectInput(inputId = "dayinput", 
                  label = "Day Filter", 
                  choices = c("Monday", "Tuesday","Wednesday","Thuuuuuuuuuuuuuuuursday")), 
      dataTableOutput("table1")
    )
    
    server <- function(input, output) {
    
      output$table1 <- renderDataTable({
        price <- c("12", "11", "14", "15")
        day <- c("Monday", "Tuesday", "Wednesday","Thuuuuuuuuuuuuuuuursday")
        df <- data.frame(price, day) %>% filter(day == input$dayinput)
    
        datatable(df, rownames = FALSE, class = 'cell-border stripe', 
                  options = list(dom = 't', pageLength = -1, lengthMenu = list(c(-1), c('All')),
                                 autoWidth = FALSE)
        )
      })
    }
    
    shinyApp(ui =ui, server = server)
    

    【讨论】:

    • 是的,这通常会起作用,不幸的是我事先不知道列数,这使得很难预先确定表格的适当宽度。
    • 你能确定一个固定的宽度并将scrollX = TRUE添加到datable-options吗?或者用一些 css 修复它?
    • 你的意思是固定的列宽吗?如果是这样,您能否展示一些示例代码?如果您的意思是固定表格宽度,我看不到scrollX的使用?
    • 我编辑了我的答案。您也可以使用 css-rules 确定列宽。假设您有一个包含 20 列的表格,而您在应用程序中只有有限的空间,您可以确定表格的固定最大宽度。如果表格宽度大于给定的空间,scrollX 绝对有意义。
    • DT 的“columnDefs”参数对我来说不起作用,所以我像你建议的那样使用 CSS 样式来应用最大列宽样式。
    猜你喜欢
    • 2016-01-02
    • 1970-01-01
    • 2018-07-02
    • 2020-01-13
    • 2019-07-15
    • 2013-07-08
    • 1970-01-01
    • 2015-02-18
    • 2021-08-28
    相关资源
    最近更新 更多