如何使DT::datatable中的水平滚动条可见

46

使用R Shiny和DT包,我正在创建某些表格。列的数量根据用户输入而变化,并且不是固定的。我已经包含了以下代码片段,以包括水平滚动条,以便当列数较多时,用户可以滚动查看未直接可见的列。

server.R:

output$results <- DT::renderDataTable({
    DT::datatable(data = datasetInput(),
                  options = list(scrollX = TRUE,...)
                  )
  })
<code reduced for brevity>
使用上述代码后,水平滚动条一开始不可见,但当我点击一行并在键盘上按右箭头时就会出现。有没有办法让滚动条在表格启动时立即可见,无论有多少列,我都可以使用鼠标指针拖动滚动条? 更新: 我尝试了下面答案中的代码,这是我看到的-没有水平滚动条。 enter image description here

1
请务必提供您的 sessionInfo()。虽然您没有明确表示,但我猜您在使用 Mac OS X。如果是这种情况,那么并没有什么让人惊讶的。这只是 Mac 的默认行为 - 滚动条在开始滚动之前默认是隐藏的。 - Yihui Xie
谢谢Yihui。没错,我正在使用MacOSX。我会确保在未来提供我的sessionInfo()。 - Komal Rathi
我不经常使用Mac,但我猜可能有一种方法可以使滚动条始终可见。看看你在Google上是否有什么运气... - Yihui Xie
4个回答

79

我认为如果不需要滚动条,你不能(或不应该)轻易地强制添加一个,但是上面的代码对我来说很好用,它在页面初始化时显示滚动条。也许问题出在数据或其他方面。

下面是一个最小化的示例,在页面加载时有一个水平滚动条

runApp(shinyApp(
  ui = fluidPage(
    DT::dataTableOutput("results", width = 300)
  ),
  server = function(input, output, session) {
    output$results <- DT::renderDataTable(
      mtcars,
      options = list(scrollX = TRUE)
    )
  }
))

1
我的代码中滚动条是可以工作的,但在我点击一行并按右箭头之前它并不可见。它不可见,因此我不能用鼠标指针拖动它。 - Komal Rathi
我不知道这个问题有多大或者是否重要,但是我在DT::datatable中使用了选项,而你在DT::renderDataTable中使用了它。我猜这不是问题所在。但是我仍然无法看到滚动条,除非使用键盘,而且绝对不能使用鼠标滚动。 - Komal Rathi
你是对的,在renderDataTabledatatable中使用选项没有区别。正如我所说,我怀疑问题不在于datatable,而在于你的数据集或代码中其他导致此问题的原因,因为像我展示的简单例子确实可以工作。 - DeanAttali
我也尝试了你的代码,但是它没有显示水平滚动条。我不知道这是否与我的浏览器有关?我在我的问题中粘贴了截图。 - Komal Rathi
有很多原因你想要滚动条,例如如果你想要一个固定的标题或列。而且设置scrollY=T对我来说不起作用。可能是选项之间的兼容性问题。 - Paul
显示剩余2条评论

16

试试这个:

DT::datatable(sta, options = list(
  pageLength=50, scrollX='400px'), filter = 'top')

2

我也会这样做:

datasetInput1 <- reactive({
      infile <- input$file1
      if(is.null(infile))
        return(NULL) 
      else
        m <- read.csv(infile$datapath, header = input$header)
        return ( DT::datatable(m, extensions = 'Scroller', options = list(deferRender = F, dom = 't',
                                                                      columnDefs = list(list(className = 'dt-center',
                                                                                             targets = 5)),
                                                                     scrollY = 300, scroller = TRUE, scrollX = T,
                                                                     pageLength = 5))
               )
    })

0

对于初学者来说,使用服务器端的Datatables可能会很困难。但是你可以使用DataTables Quick几乎不费吹灰之力地在服务器端实现Datatables。我发现这些工具能够方便我的日常工作,我认为每个程序员都会想要尝试一下。注意:不要在生产环境中使用它,因为它可能会以某种方式损坏你的数据。


2
你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接