javascript - tabla - Agregar botón de radio para seleccionar una fila de DataTable en Shiny
seleccionar una fila de un datatable c# (1)
Necesito agregar radiButtons para seleccionar filas en Data, es decir, el radiobutton elegido debe pasarse a la entrada. No puedo usar la selección de filas incorporadas en DT. Realmente necesito usar botones de radio para seleccionar la fila. Esto es lo que se quiere:
Usando https://yihui.shinyapps.io/DT-radio/ Puedo seleccionar COLUMNAS. Es:
library(shiny)
library(DT)
shinyApp(
ui = fluidPage(
title = ''Radio buttons in a table'',
DT::dataTableOutput(''foo''),
verbatimTextOutput("test")
),
server = function(input, output, session) {
m = matrix(
c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F,
dimnames = list(month.abb, LETTERS[1:3])
)
for (i in seq_len(nrow(m))) {
m[i, 3] = sprintf(
if_else(i == 1,
''<input type="radio" name="%s" value="%s" checked="checked"/>'',
''<input type="radio" name="%s" value="%s"/>''),
"C", month.abb[i]
)
}
m=t(m)
output$foo = DT::renderDataTable(
m, escape = FALSE, selection = ''none'', server = FALSE,
options = list(dom = ''t'', paging = FALSE, ordering = FALSE),
callback = JS("table.rows().every(function() {
var $this = $(this.node());
$this.attr(''id'', this.data()[0]);
$this.addClass(''shiny-input-radiogroup'');
});
Shiny.unbindAll(table.table().node());
Shiny.bindAll(table.table().node());")
)
output$test <- renderPrint(str(input$C))
}
)
Ingenuamente, intenté eliminar m = t (m) y cambiar las filas por columnas en la devolución de llamada. Esto no funciona porque la función de devolución de llamada en el ejemplo está agregando clase e identificación a la última, que no tienen contrapartida para la columna.
¿Alguna idea?
Una solución "sucia" podría ser envolver toda la tabla de datos en un div
con la ID C
y la clase de shiny-input-radiogroup
:
shinyApp(
ui = fluidPage(
title = ''Radio buttons in a table'',
tags$div(id="C",class=''shiny-input-radiogroup'',DT::dataTableOutput(''foo'')),
verbatimTextOutput("test")
),
server = function(input, output, session) {
m = matrix(
c(round(rnorm(24),1), rep(3,12)), nrow = 12, ncol = 3, byrow = F,
dimnames = list(month.abb, LETTERS[1:3])
)
for (i in seq_len(nrow(m))) {
m[i, 3] = sprintf(
if_else(i == 1,
''<input type="radio" name="%s" value="%s" checked="checked"/>'',
''<input type="radio" name="%s" value="%s"/>''),
"C", month.abb[i]
)
}
m
output$foo = DT::renderDataTable(
m, escape = FALSE, selection = ''none'', server = FALSE,
options = list(dom = ''t'', paging = FALSE, ordering = FALSE)
)
output$test <- renderPrint(str(input$C))
}
)