2017-09-22 3 views
1

In einer Datentabelle ändert sich ein Wert abhängig davon, ob die entsprechende Zeile ausgewählt ist oder nicht. Was mir Kopfschmerzen bereitet, ist folgendes: Wenn die Daten aktualisiert werden, wird die Tabelle neu geschrieben, und die Auswahl ist weg.Shiny DT :: datatable - Ändern des Tabelleninhalts bei der Auswahl von Zeilen

Ich habe an dieser Herausforderung für ein paar Stunden gearbeitet, bin aber noch nicht auf eine Lösung gestoßen. Meistens finde ich bei stackoverflow Lösungen für meine Probleme, aber diesmal nicht.

Im folgenden Beispiel wird die letzte Spalte soll die Zeile des Auswahlstatus zeigen. Ich habe versucht, die ausgewählten Zeilen zu verfolgen und sie vorzuwählen, wann immer die Tabelle neu geschrieben wird. Aber ich konnte nicht herausfinden, wie es funktioniert. Der Code funktioniert nicht, aber (hoffentlich) zeigt, was ich brauche.

library(shiny) 
library(DT) 
mymtcars = mtcars[1:5, 1:2] 

runApp(
    list(ui = fluidPage(DT::dataTableOutput("mytable")), 

    server = function(input, output, session) { 
     rowSelect <- reactive({ 
      a <- rep(FALSE,5) 
      a[input$mytable_rows_selected] <- TRUE 
      return(a) 
     }) 

     output$mytable = DT::renderDataTable(
      cbind(mymtcars, v=rowSelect()), 
      options = list(dom="t", 
          ordering=FALSE), 
      selection=list(mode='multiple', 
          selected=(1:5)[rowSelect()], 
          target='row') 
     ) 
    }) 
) 

Durch die Art und Weise, ein weniger elegant, sondern auch möglicher Weg eine Spalte von Kontrollkästchen anstelle des Datentabelle Zeilenauswahlmechanismus würde hinzufügen. Ich habe das auch versucht, hatte aber ähnliche Probleme. Alles funktionierte so, wie ich es wollte, bis zu dem Punkt, an dem ich meinen Daten reaktive Spalten hinzugefügt habe.

Antwort

1

Sie haben es fast richtig gemacht! Sie haben zu setzen Tisch wickeln mit datatable:

output$mytable <- DT::renderDataTable(
    datatable(cbind(mymtcars, v=rowSelect()), 
       options = list(dom = "t",ordering = FALSE), 
       selection = list(mode = "multiple", 
           selected =(1:5)[rowSelect()], 
           target = "row")) 
) 

enter image description here

+0

Leider habe ich nicht Ihre Antwort nützlich abstimmen, wie mein Ruf zu niedrig :-(ist Vielleicht wissen Sie auch, wie die Tabelle beginnen mit allen Linien selcted ? – Hans

+0

@Hans sollte es eine Option in der Datentabelle geben wie 'selected =" all "' – PoGibas

+0

Das ist schwierig, da diese Option bereits verwendet wird, um sich an die vorherige Auswahl zu erinnern (vor dem Umschreiben der Tabelle). "Ausgewählt" als "nicht ausgewählt" interpretieren und umgekehrt, indem ich 'v =! rowSelect()' interpretiere, aber ich denke, es wäre eleganter, auf diese Weise nicht "zu betrügen". Aber trotzdem, vielen Dank, Ihre Antwort h Elped mich sehr. – Hans

Verwandte Themen