如何为R Shiny DT表格添加重置按钮并置于保存按钮旁?
为DT表格添加重置按钮(置于保存按钮旁)
你需要在DT表格的按钮栏中添加一个重置按钮,点击后恢复到初始的默认表格,以下是修改后的完整代码:
library(shiny) library(DT) library(dplyr) # 单独定义初始表格,方便重置时直接调用 initial_df <- data.frame( x = seq(1:12), y = LETTERS[1:12] ) ui <- fluidPage( fileInput("upload", NULL, accept = c(".csv")), DTOutput("head") ) server <- function(input, output, session) { rv <- reactiveValues( dataframe = initial_df # 初始化使用预设的初始表格 ) # 监听文件上传,更新表格 observe({ req(input$upload) ext <- tools::file_ext(input$upload$name) rv$dataframe <- switch(ext, csv = read.csv(input$upload$datapath), NULL) }) # 监听重置按钮点击,恢复初始表格 observeEvent(input$reset_table, { rv$dataframe <- initial_df }) output$head <- renderDT({ validate(need(!is.null(rv$dataframe), "请上传.csv格式文件")) datatable(rv$dataframe, extensions = 'Buttons', options = list( dom = 'Bfrtip', buttons = list( # 保存按钮 list(extend = 'csv', filename = '//public/comments/comments.csv', text = 'Save'), # 重置按钮:自定义action类型,绑定Shiny输入事件 list(extend = "action", text = "重置", className = "btn btn-default", # 和保存按钮样式统一 action = DT::JS("function() { Shiny.setInputValue('reset_table', Math.random()); }") ) ) )) }) } shinyApp(ui, server)
关键改动说明:
- 单独定义
initial_df存储初始表格数据,重置时直接复用,避免重复创建 - 在DT的
buttons列表中新增一个自定义按钮,类型为action,通过JS触发Shiny的reset_table输入事件 - 服务器端添加
observeEvent监听reset_table事件,将rv$dataframe重置为初始表格 - 给重置按钮设置
className = "btn btn-default",保证和保存按钮样式一致
当前版本截图:
内容的提问来源于stack exchange,提问作者Abbas
相关产品推荐
相关产品推荐

