![](/img/trans.png)
[英]R Shiny JS jump to last page conflicting with auto generate value in new row
[英]R Shiny DT auto generate a value in a newly added row
我有一個Shiny
的應用程序,允許用戶將他們的project details
輸入數據庫。 這是通過向表中添加空行的“ Add Project Details Button
來實現的。 現在下一步是:
reference number
(在Reference.Number
列下)。 因此,就像基於下面的sample data
一樣,因為最后一個reference number
是33335
,下一個參考編號將是33336
。 如果添加另一行,那么它將是33337
。我怎樣才能做到這一點?
樣本數據( df
):
df <- structure(list(Reference.Number = c("33331", "33332", "33333",
"33334", "33335"),
Request.Date = c("1/6/2022", "1/6/2022", "1/19/2022",
"1/20/2021", "1/24/2022"),
Requestor.Name = c("Comm Dist 3 by Kitty", "Comm Dist 3 by Kitty", "Updated maps for David", " Stone Cold", "Updated SOE 60 inch wall map"),
Requestor.Dept.Div = c("C 3 Staff", "C 3 Staff", "Unincorp & Comm", "Mt.Rushmore AME Church Ft. Billy", "SOE"),
Requestor.Phone = c("", "", "", "", ""),
Contact.Person = c("Tommy", "Tommy", "Bob", "Bob", "Joe"),
Contact.Phone = c("1111", "2222", "3333", "ext 1111", "3434"),
Deadline = c("1/20/2022", "1/20/2022", "1/22/2022", "", "1/24/2022"),
Project.Description = c("45x36 portrait map ", "45x36 portrait map ", "24x24 Unincorporated areas", "Percent Females Aged 25 - 55 Below Poverty Level By Zip Code", "SOE Wall Map 60x60 p"),
Project.File.Location = c("",
"", "C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14785 Unincorporated 24x24.pdf",
"C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\FemalesAge10-18BelowPoveryLevel.aprx",
"C:\\ABC\\Tommy\\work|Map-Projects\\BD Unincororated\\#14786 V P 60x60.pdf"
), PDF.File.....Map.Name.... = c("", "", "", "C:\\ABC\\Demographics\\Demographic_Request\\FemalesAge10-18BelowPoveryLevel\\pdfs\\MapNo14785.pdf",
""), Assigned.To = c("", "", "", "", ""), Completion.Date = c("",
"", "", "", ""), Notes = c(NA, NA, NA, NA, NA), Year = c(2022,
2022, 2022, 2022, 2022)), class = "data.frame", row.names = c(NA, -5L))
代碼:
library(shiny)
library(shinythemes)
library(shinyWidgets)
library(shinyanimate)
library(DT)
library(tidyverse)
# Define UI for application that draws a histogram
ui = navbarPage(tags$style("table, .table {color: unset;} .dataTable th, .datatables input {color: white}"),
title = div("GIS Team Projects"),
theme = shinytheme("cyborg"),
tabPanel("GIS Projects",
icon = icon("info"),
div(p(h1("Instructions:"),style="text-align: justify;")),
p("1. The user can add their project details.", style="color:black"),
uiOutput("all"),
sidebarLayout(
sidebarPanel(
actionButton("addData", "Add Project Details"),
),
mainPanel(
downloadButton("download1","Download data as csv"),
DTOutput("contents")),)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
myData = df
# Create an 'empty' tibble
user_table =
myData %>%
slice(1) %>%
# Transpose the first row of test into two columns
gather(key = "column_name", value = "value") %>%
# Replace all values with ""
mutate(value = "") %>%
# Reshape the data from long to wide
spread(column_name, value) %>%
# Rearrange the column order to match that of test
select(colnames(myData))
# Display data as is
output$contents =
renderDT(myData,
server = FALSE,
editable = TRUE,
options = list(lengthChange = TRUE),
rownames = FALSE)
# Store a proxy of contents
proxy = dataTableProxy(outputId = "contents")
# Each time addData is pressed, add user_table to proxy
observeEvent(eventExpr = input$addData, {
proxy %>%
addRow(user_table)
})
}
# Run the application
shinyApp(ui = ui, server = server)
myData
應該是一個reactiveVal
:
library(shiny)
library(shinythemes)
library(shinyWidgets)
library(shinyanimate)
library(DT)
library(tidyverse)
# Define UI for application that draws a histogram
ui = navbarPage(tags$style("table, .table {color: unset;} .dataTable th, .datatables input {color: white}"),
title = div("GIS Team Projects"),
theme = shinytheme("cyborg"),
tabPanel("GIS Projects",
icon = icon("info"),
div(p(h1("Instructions:"),style="text-align: justify;")),
p("1. The user can add their project details.", style="color:black"),
uiOutput("all"),
sidebarLayout(
sidebarPanel(
actionButton("addData", "Add Project Details"),
),
mainPanel(
downloadButton("download1","Download data as csv"),
DTOutput("contents")),)
)
)
# Define server logic required to draw a histogram
server <- function(input, output) {
myData = reactiveVal(df)
# Create an 'empty' tibble
user_table =
df %>%
slice(1)
user_table[1,]<-NA
# Display data as is
output$contents =
renderDT(myData(),
server = FALSE,
editable = TRUE,
options = list(lengthChange = TRUE),
rownames = FALSE)
# Store a proxy of contents
proxy = dataTableProxy(outputId = "contents")
# Each time addData is pressed, add user_table to proxy
observeEvent(eventExpr = input$addData, {
myData(myData() %>% bind_rows(user_table %>% mutate(Reference.Number=as.character(max(as.numeric(myData()$Reference.Number))+1))))
})
}
# Run the application
shinyApp(ui = ui, server = server)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.