Dropdown中的列名称R来自数据库的SelectInput

时间:2018-04-16 17:43:24

标签: r shiny

我使用以下代码用数据库值填充下拉列表: -

Server.R

sqlOutputAssetClass <- reactive({
    sqlInputAssetClass<- paste("select distinct ASSET_CLASS from DUMMY_TABLE",sep="")
    dbGetQuery(con, sqlInputAssetClass)
   })

sqlOutputFeedSrcSys <- eventReactive(input$pick_assetclass, {
    sqlInputFeedSrcSys<- paste("select distinct FEED_SRC_SYS from DUMMY_TABLE where ASSET_CLASS=",
                               "'",
                               input$pick_assetclass,"'",sep="")
    dbGetQuery(con,sqlInputFeedSrcSys)
    })        

observe ({
    updateSelectInput(session,"pick_assetclass","ASSET CLASS",
                      choices = sqlOutputAssetClass())
   })

observe ({
    updateSelectInput(session,"pick_feedsrcsys","FEED SOURCE SYSTEM",
                      choices = sqlOutputFeedSrcSys())
   })

UI.R

selectInput('pick_assetclass',label ='Asset Class',
            choices=NULL,selected = NULL, multiple = FALSE,width="450px"),

selectInput('pick_feedsrcsys',label ='Feed Src Sys',
            choices=NULL,selected = NULL, multiple = FALSE,width="450px"),

我看到下拉列表中包含值,但也包含数据库表中的列名称。 另一个奇怪的事情是,当下拉列表中只有一个值时,该值不会显示,但会显示列名称。

您能告诉我如何解决这些问题吗?

enter image description here

enter image description here

谢谢,

2 个答案:

答案 0 :(得分:0)

这不是答案,而是延伸评论。

为了查看传递给updateSelectInput的值,您可以在更新之前调用browser(),如此

observe ({
  choices = sqlOutputAssetClass()
  browser()
  updateSelectInput(session,"pick_assetclass","ASSET CLASS",
                   choices = sqlOutputAssetClass()
  )
})

这将打开一个交互式控制台,您可以在其中打印您的选择以及所有其他输入/反应,并查看将其转换为&#34;裸&#34;字符串没有标签,属性或名称。在您单击&#34; next&#34;并且只要运行observe块,就会重新打开。

您最终要传递给更新功能的对象应该如下所示

choices <- c("FX", "CS", "AT", "FUTURES")

答案 1 :(得分:0)

来自dataSet.NameString(1, "CUST_KIND") = document.searchForm.CUST_KIND.value;

  

选项:...这也可以是一个命名列表,其元素是(命名或未命名的)列表或向量。如果是这种情况,最外面的名称将用作相应子列表中元素的“optgroup”标签。这允许您对类似的选项进行分组和标记。 ...

所以在你的情况下,?selectInput可能会返回一个命名向量。只需运行dbGetQuery即可在从unname返回之前删除这些名称,并且类别名称应该消失:

sqlOutputAssetClass