根据可编辑单元格用户输入更新闪亮的 DT

Posted

技术标签:

【中文标题】根据可编辑单元格用户输入更新闪亮的 DT【英文标题】:Update shiny DT based on editable cells user input 【发布时间】:2020-12-29 05:39:59 【问题描述】:

一个闪亮的应用小例子:

library(shiny)
library(tidyverse)
library(DT)

ui <- fluidPage(

    # Application title
    titlePanel("blah"),

    sidebarLayout(
        sidebarPanel(
            sliderInput("bins",
                        "Number of bins:",
                        min = 1,
                        max = 50,
                        value = 30)
        ),

        # Show a plot of the generated distribution
        mainPanel(
           DT::DTOutput('ex_table')
        )
    )
)

server <- function(input, output) 

    output$ex_table <- DT::renderDataTable(mtcars %>% select(cyl) %>% mutate(blah = cyl + 2), 
                                           selection = 'none', editable = TRUE)


# Run the application 
shinyApp(ui = ui, server = server)

如果你运行它,它看起来像:

由于我在renderDataTable() 中添加了editable = TRUE,因此您可以编辑单元格。

提供数据表的表有以下行:

mtcars %>% select(cyl) %>% mutate(blah = cyl + 2)

所以特征 'blah' 应该始终是 cyl + 2 中的任何内容。在屏幕截图中,我添加了 10,000,因此所需的输出将是数据表在按 Enter 后更新以显示 10,002。

这可能吗?我该怎么做?

【问题讨论】:

【参考方案1】:

您可以关注这些examples。 试试看:

library(shiny)
library(tidyverse)
library(DT)

ui <- fluidPage(
  
  # Application title
  titlePanel("blah"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("bins",
                  "Number of bins:",
                  min = 1,
                  max = 50,
                  value = 30)
    ),
    
    # Show a plot of the generated distribution
    mainPanel(
      DT::DTOutput('modtable'),
    )
  )
)

server <- function(input, output,session) 
  data <- mtcars %>% select(cyl) %>% mutate(blah = cyl + 2)
  
  output$modtable <- DT::renderDT(data, selection = 'none', editable = TRUE)
  
  proxy = dataTableProxy('modtable')

  observeEvent(input$modtable_cell_edit, 
    info = input$modtable_cell_edit
    str(info)
    i = info$row
    j = info$col
    v = info$value
    data <<- editData(data, info)
    if(j==1)data[i,j+1]<<-as.numeric(data[i,j])+2
    replaceData(proxy, data, resetPaging = FALSE) 
  )



# Run the application 
shinyApp(ui = ui, server = server)

【讨论】:

以上是关于根据可编辑单元格用户输入更新闪亮的 DT的主要内容,如果未能解决你的问题,请参考以下文章

使用带闪亮的 Flexdashboard 时如何拥有可编辑的 DT 表?

如何根据条件使primefaces datatable列可编辑

带有按钮的表视图,可根据用户输入更改标签

怎么设置单元格区域不允许用户编辑

JQuery实现可直接编辑的表格

为 DT 闪亮中的单列渲染下拉列表,但仅在单元格单击时加载并使用 replaceData()