R Shiny DT 数据表如何更改所选类别

问题描述 投票:0回答:1

有没有一种方法可以更改所选行/列/单元格的类,而无需使用“选择”扩展?

问题:当设置

style = "bootstrap"
时,所选项目的类别为
class = "active"
。因为 bootstrap 主题通常将
active
设置为某种灰色,所以 DT 必须覆盖 bootstrap 的
active
背景颜色,这样它就不会与白色/灰色交替行颜色混淆。我不想覆盖颜色,而是想将类从
active
更改为
info
。这样,我选择的任何主题都会看起来不错,并且选定的行不会与未选定的行混淆。

此外,DT 选择覆盖 bootstrap 的

active
背景颜色的蓝色使搜索词的突出显示看起来很丑陋。请参阅示例。 DT 为
style="default"
选择的蓝色并不总是与所选的引导程序主题相匹配。

顺便说一句,我使用“选择”扩展成功地将所选类别更改为

info
并在选项中进行设置,但这带来了其他问题,主要是我无法预先选择一行。

library(shiny)
library(DT)

dt <- data.frame(colA = sample(c("one","two"),10,replace=T), ColB = rnorm(10))

ui <- basicPage(
  DTOutput("test_table")
)

server <- function(input, output) {
  
  output$test_table <- renderDT({
    datatable(dt,
      style = "bootstrap",
      selection = list(mode = "single", selected = 1),
      options = list(searchHighlight = T, search = list(search = "o"))
    )
  })
}

shinyApp(ui = ui, server = server)
r shiny datatable dt
1个回答
0
投票

这里有一个解决方案,试图避免依赖于 DT 包编写的 html/css 结构,该结构可能会更改,恕不另行通知。它使用

bs_add_rules()
将主题的颜色分配给变量
--dt-row-selected
。该解决方案适用于 bslib 0.6.1 和 DT 0.32。

library(shiny)
library(DT)

ui <- fluidPage(
  theme = bslib::bs_theme(bootswatch = "superhero") |>
    bslib::bs_add_rules("
    :root {
      --dt-row-selected: var(--bs-primary-rgb)!important;
    }"),
  DTOutput("test_table")
)

server <- function(input, output) {
  output$test_table <- renderDT({
    datatable(
      iris,
      selection = list(mode = "single", selected = 2)
    )
  })
}

shinyApp(ui = ui, server = server)
© www.soinside.com 2019 - 2024. All rights reserved.