2014-10-07 26 views
11

में डेटा.table का उपयोग करके फ्रीजिंग हेडर और पहला कॉलम मेरे पास एक चमकदार ऐप है जो डेटा तालिका उत्पन्न करता है, लेकिन मैं पहले कॉलम और हेडर को फ्रीज नहीं कर सकता, इसलिए जब आप नीचे जाते हैं तो तालिका को पढ़ना मुश्किल होता है या भर में। क्या पैन फ्रीज करने के लिए वैसे भी है? मैंने खोज करने की कोशिश की है लेकिन कुछ भी नहीं मिला है।चमकदार

+0

के बीच incompatibility हाल चमकदार अद्यतन के बाद करने के लिए, आप यहाँ कोशिश करते हैं और देखते हैं कि क्या छँटाई विकल्प उपलब्ध https://datatables.net/upgrade/1.10-convert –

उत्तर

12

दिलचस्प सवाल और अब चमकदार के हालिया अपडेट data.tables 1.10.2 के लिए धन्यवाद, यह विभिन्न प्लग-इन और एक्सटेंशन का उपयोग करना बहुत आसान है। आपके प्रश्न के लिए FixedHeader एक्सटेंशन आदर्श लगता है। इस विस्तार के हम प्रासंगिक JavaScript और CSS फ़ाइल शामिल करने की ज़रूरत को जोड़ने के लिए (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 एक विकल्प initComplete जो हमें एक कॉलबैक निर्धारित करना एक बार तालिका तैयार की है आदि की अनुमति देता है

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

हम iris डेटा सेट के एक संशोधित संस्करण का उपयोग करेंगे जो बाएं से दाएं स्क्रॉलिंग दिखाने के लिए अंत में एक इंडेक्स और कुछ यादृच्छिक डेटा जोड़ देगा:

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 
              }); 
             }") 
            ) 
    ) 
    }) 
) 

इसलिए छवि में हम देख सकते हैं कि हम 8 रिकॉर्ड करने के लिए नीचे स्क्रॉल किए गए हैं और कुछ तरीकों से हैं लेकिन हेडर और पहला कॉलम (हमारे जोड़े गए इंडेक्स कॉलम) अभी भी दिखाई दे रहे हैं।

enter image description here

+1

मुबारक मदद करने के लिए कर रहे हैं हो सकता है अगर इस सवाल का जवाब हल करती है आपका प्रश्न इसे टिककर इसे स्वीकार करने के रूप में चिह्नित करने पर विचार करें। – jdharrison

+1

आपकी मदद के लिए बहुत धन्यवाद! क्या पहले कॉलम के हेडर को फ्रीज करने का कोई तरीका है, इसलिए यह ठीक है जैसे मैं दाईं ओर स्क्रॉल करता हूं? – Kamal

+2

'डेटाटेबल्स' प्रलेखन और आपके उत्कृष्ट विस्तृत उत्तर के बाद, मैंने अपने चमकदार ऐप्स में से एक में 'फिक्स्ड कॉलम' प्लगइन की कोशिश की। मैंने अपने फिक्स्ड कॉलम/3.0.2' सीएसएस और जेएस फाइलों के साथ-साथ 'हेडरटेबल्स 1.10.4' सीएसएस और जेएस फाइलों को अपने हेडर में शामिल किया और मेरे विकल्पों में' initComplete' को मामूली परिवर्तन के साथ निम्नानुसार शामिल किया: 'फ़ंक्शन (सेटिंग्स, जेसन) { नया $ .fn.dataTable.FixedColumns (यह, {}); } '। हालांकि जब मैंने ऐप चलाया, तो तालिका 'प्रसंस्करण ...' संदेश प्रदर्शित करती रही और उम्मीद के अनुसार लोड नहीं हुई। मैं वर्तमान में नवीनतम चमकदार रिलीज, 0.11 का उपयोग कर रहा हूँ। विचार? –

3

FixedHeader काम नहीं कर रहा है, गलत स्तंभ नाम है, जबकि एक्स-स्क्रॉलिंग, लेकिन FixedColumns काम करता है देता है। यह वजह से उन्हें

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)) 
    ) 
    ) 
    } 
) 
)