根据 tabPanel 选择从数据库获取数据。闪亮

Posted

技术标签:

【中文标题】根据 tabPanel 选择从数据库获取数据。闪亮【英文标题】:GET data from database based on the tabPanel selection. RShiny 【发布时间】:2020-08-12 09:02:40 【问题描述】:

我想根据选项卡选择检索数据。例如,如果我单击选项卡 A,它应该显示选项卡数据等等。 仅当我在 2 个选项卡中注释掉 datatableoutput 时,我的代码才有效。否则,它显示的是一个空白页面。

下面是我使用的代码。

library(shiny)
library(DT)
library(dplyr)
library(RODBC)

server <- function(input, output, session) 

  output$table <- DT::renderDataTable(

    x <- req(input$tabs)
    print(x)
    sql <- paste0("EXEC [dbo].[usp_GET_Applications] @pCategory_Name=N'", input$tabs,"'")
    res = connectionBtS$sqlQuery(sql)
    dfData <- res$getResult()
    dfData <- data.frame(dfData) 

    DT::datatable(dfData %>% select("Application","Description","Contact", "Email"), escape = FALSE ,
                  options = list(
                    columnDefs = list(list(targets = c(4), visible = FALSE)),
                    rowCallback = JS(
                    "function(row, data) ",
                    "var full_text =  data[4] ",
                    "$('td:eq(3)', row).attr('title', full_text);",
                    ""))
                  )
  )


ui <- shinyUI(fluidPage(h1(titlePanel("TITLE"))), 

  tabsetPanel(id="tabs",

    tabPanel("Tab A", value="A",DT::dataTableOutput("table")),

    tabPanel("Tab B", value="B", DT::dataTableOutput("table")),

    tabPanel("C", # value="C",DT::dataTableOutput("table")),

  )))

shinyApp(ui = ui, server = server)

期待帮助。 非常感谢。

【问题讨论】:

你不能有重复的idtable,你需要创建新的如table1table2 【参考方案1】:

根据我的评论,您不能拥有具有相同id 的对象,因此请尝试渲染不同的对象

library(shiny)
library(DT)

ui <- fluidPage(
    h1(titlePanel("TITLE")),

    tabsetPanel(id="tabs",
                tabPanel("Tab A", 
                         value="A",
                         DT::dataTableOutput("table")
                ),
                tabPanel("Tab B", 
                         value="B", 
                         DT::dataTableOutput("table2")
                ),

                tabPanel("Tab C", 
                         value="C",
                         DT::dataTableOutput("table3")
                )
    )
)

server <- function(input, output, session) 

    table_data <- reactive(
        head(mtcars)
    )

    output$table <- DT::renderDataTable(
        table_data()
    )

    output$table2 <- DT::renderDataTable(
        table_data()
    )

    output$table3 <- DT::renderDataTable(
        table_data()
    )



shinyApp(ui = ui, server = server)

【讨论】:

以上是关于根据 tabPanel 选择从数据库获取数据。闪亮的主要内容,如果未能解决你的问题,请参考以下文章

将自定义数量的 tabPanel 添加到闪亮仪表板中的 tabsetPanel

根据闪亮小部件的 if 条件将值替换为数据表

通过导航到 navbarPage 中的特定 tabPanel 触发 R Shiny 反应式

在R闪亮中动态创建表时出错

在闪亮仪表板的选项卡面板中调整ggplot条形图的高度

以闪亮的方式隐藏和显示侧边栏面板