R Shiny中DT::datatable固定表头与首列异常问题求可行解决方案
适配多标签页场景的DT固定表头+首列解决方案
基于方案1调整即可同时解决列错位、跨标签页表头溢出两个问题,无需引入FixedHeader扩展,仅需补充表格绘制回调强制更新固定列对齐状态。
核心修改逻辑
- 保留
scrollY+FixedColumns的基础配置,从根源避免FixedHeader带来的跨标签页元素溢出问题 - 在DT的配置项中新增
drawCallback回调,每次表格重绘(切换分页条数、切换标签页触发渲染等场景)时自动调用官方接口更新固定列的对齐参数,彻底解决列错位问题
完整可运行代码
require(shiny) require(DT) shinyApp( ui = tabsetPanel( tabPanel( title = "Tab 1", fluidPage( DTOutput("table1") ) ), tabPanel( title = "Tab 2", fluidPage( plotOutput("myPlot"), DTOutput("table2") ) ) ), server = function(input, output, session) { output$table1 <- DT::renderDataTable({ myData <- cbind(iris, iris, iris, iris) colnames(myData) <- paste0("Column ", 1:ncol(myData)) DT::datatable( data = myData, extensions = "FixedColumns", rownames = F, options = list( scrollX = T, scrollY = "500px", fixedColumns = list(leftColumns = 1), # 新增绘制回调,每次重绘后更新固定列对齐 drawCallback = JS(" function() { $(this).DataTable().fixedColumns().update(); } ") ) ) }) output$myPlot <- renderPlot({ plot(1:10, 1:10) }) output$table2 <- DT::renderDataTable({ DT::datatable(iris) }) } )
实测该方案下,切换每页展示条数为任意值、滚动到表格底部均不会出现首列错位,切换标签页也不会出现其他页面的表头溢出问题。
内容的提问来源于stack exchange,提问作者Ben Ernest
相关产品推荐
相关产品推荐

