2014-10-07 18 views
11

Tôi có ứng dụng Sáng bóng tạo ra bảng dữ liệu, nhưng tôi không thể cố định cột đầu tiên và tiêu đề, vì vậy khó đọc được bảng khi bạn đi xuống hoặc băng qua. Có anyway để đóng băng các tấm? Tôi đã thử tìm kiếm nhưng không tìm thấy gì cả.Tiêu đề đóng băng và cột đầu tiên sử dụng dữ liệu.table trong Shiny

+0

Sau cập nhật Shiny gần đây, bạn có thể thử ở đây và xem những tùy chọn phân loại có sẵn https://datatables.net/upgrade/1.10-convert –

Trả lời

12

Câu hỏi thú vị và giờ đây nhờ có bản cập nhật mới nhất của Shiny to data.tables 1.10.2 , việc sử dụng các trình cắm và tiện ích khác nhau trở nên dễ dàng hơn rất nhiều. Đối với câu hỏi của bạn, tiện ích mở rộng FixedHeader có vẻ lý tưởng. Để thêm phần mở rộng này, chúng ta cần phải bao gồm những liên quan JavaScriptCSS tập tin (xem http://cdn.datatables.net/):

tagList(
    singleton(tags$head(tags$script(src='//cdn.datatables.net/fixedheader/2.1.2/js/dataTables.fixedHeader.min.js',type='text/javascript'))), 
    singleton(tags$head(tags$link(href='//cdn.datatables.net/fixedheader/2.1.2/css/dataTables.fixedHeader.css',rel='stylesheet',type='text/css'))) 
) 

data.tables có một tùy chọn initComplete cho phép chúng ta định gọi lại một lần bảng được vẽ, vv

function(settings, json) { 
    new $.fn.dataTable.FixedHeader(this, { 
              left: true, 
              right: true 
              }); 
             } 

Chúng tôi sẽ sử dụng phiên bản sửa đổi của tập dữ liệu iris thêm chỉ mục và một số dữ liệu ngẫu nhiên ở cuối để hiển thị trái sang phải cuộn:

library(shiny) 
myData <- cbind(list(index = row.names(iris)), iris 
       , rep(list(row.names(iris)), 10)) 
names(myData)[7:16] <- paste0("randomData", 1:10) 
runApp(
    list(ui = fluidPage(
    tagList(
     singleton(tags$head(tags$script(src='//cdn.datatables.net/fixedheader/2.1.2/js/dataTables.fixedHeader.min.js',type='text/javascript'))), 
     singleton(tags$head(tags$link(href='//cdn.datatables.net/fixedheader/2.1.2/css/dataTables.fixedHeader.css',rel='stylesheet',type='text/css'))) 
    ), 

    dataTableOutput("mytable") 
) 
    , server = function(input, output, session){ 
    output$mytable <- renderDataTable(myData, 
             options = list(
             pageLength = 50, 
             initComplete = I("function(settings, json){ 
              new $.fn.dataTable.FixedHeader(this, { 
              left: true, 
              right: true 
              }); 
             }") 
            ) 
    ) 
    }) 
) 

vì vậy trong hình ảnh chúng ta có thể thấy chúng tôi được cuộn xuống để ghi 8 và qua một số cách nhưng tiêu đề và cột đầu tiên (cột chỉ mục được thêm của chúng tôi) vẫn hiển thị.

enter image description here

+1

hạnh phúc để giúp nếu phá được câu trả lời câu hỏi của bạn xem xét đánh dấu nó như được chấp nhận bằng cách đánh dấu nó. – jdharrison

+1

Rất cám ơn sự giúp đỡ của bạn! Có cách nào để đóng băng tiêu đề của cột đầu tiên không, vì vậy nó có thể nhìn thấy khi tôi cuộn sang phải không? – Kamal

+2

Sau tài liệu 'dataTables' và câu trả lời chi tiết tuyệt vời của bạn, tôi đã thử plugin' FixedColumns' trong một trong các ứng dụng sáng bóng của mình. Tôi đã bao gồm các tệp css và js 'fixedcolumns/3.0.2' cũng như các tệp tin' css và js' dataTables 1.10.4' trong tiêu đề của tôi và bao gồm 'initComplete' trong các tùy chọn của tôi với một thay đổi nhỏ như sau:' function (settings, json) { $ .fn.dataTable.FixedColumns mới (this, {}); } '. Tuy nhiên khi tôi chạy ứng dụng, bảng tiếp tục hiển thị thông báo 'đang xử lý ...' và không tải như mong đợi. Tôi hiện đang sử dụng bản phát hành sáng bóng mới nhất, 0.11. Suy nghĩ? –

3

FixedHeader không hoạt động, cung cấp cho tên cột sai khi x-scrolling, nhưng FixedColumns công trình. Đó là do incompatibility giữa chúng

library(shiny) 
library(DT) 
runApp(
    list(ui = fluidPage(

    dataTableOutput("mytable") 
) 
    , server = function(input, output, session){ 
    Rows <- c(1:50) 
    for (y in 1:15){ 
     x<-y-1 
     assign(letters[x+1],runif(5, 0, 1)) 
    } 
    x <- data.frame(Rows, mget(letters[1:15]), row.names=NULL) 
    x<- x[2:15] 
    output$mytable <- renderDataTable(
     DT::datatable(x, rownames=FALSE,extensions = c('FixedColumns',"FixedHeader"), 
        options = list(dom = 't', 
            scrollX = TRUE, 
            paging=FALSE, 
            fixedHeader=TRUE, 
            fixedColumns = list(leftColumns = 1, rightColumns = 0)) 
    ) 
    ) 
    } 
) 
) 
Các vấn đề liên quan