我正在尝试满足两个特定需求:
-用户需要能够向DataTable添加一行
-数据表需要可编辑
当前,我已经设置了“添加行”功能以及可编辑功能,但是编辑不能持久化表排序或添加新行。
运行以下代码时,请注意如何添加/删除行,但是在编辑字段然后添加/删除行时,您将丢失编辑。
我希望有人可以帮助我结合这两个要求!感谢帮助。
this_table = data.frame(bins = c(30, 50), cb = c(T, F))
ui <- fluidPage(
sidebarLayout(
sidebarPanel(
sliderInput("bins",
"Number of bins:",
min = 1,
max = 50,
value = 30),
checkboxInput("cb", "T/F"),
actionButton("add_btn", "Add"),
actionButton("delete_btn", "Delete")
),
mainPanel(
DTOutput("shiny_table")
)
)
)
server <- function(input, output) {
this_table <- reactiveVal(this_table)
observeEvent(input$add_btn, {
t = rbind(data.frame(bins = input$bins,
cb = input$cb), this_table())
this_table(t)
})
observeEvent(input$delete_btn, {
t = this_table()
print(nrow(t))
if (!is.null(input$shiny_table_rows_selected)) {
t <- t[-as.numeric(input$shiny_table_rows_selected),]
}
this_table(t)
})
output$shiny_table <- renderDT({
datatable(this_table(), selection = 'single', options = list(dom = 't'), editable = T)
})
}
shinyApp(ui = ui, server = server)
答案 0 :(得分:0)
在编辑后,您将需要使用observeEvent
来更新表数据。您可以从input$shiny_table_cell_edit
中提取相关的表行,列和新编辑的值。尝试将以下代码添加到您的服务器功能中:
observeEvent(input$shiny_table_cell_edit, {
info <- input$shiny_table_cell_edit
edit_row <- info$row
edit_col <- info$col
edit_value <- info$value
t = this_table()
t[edit_row,edit_col] <- edit_value
this_table(t)
})