2011-09-28 12 views
7

मैं एक परियोजना में जीडब्ल्यूटी 2.4 के नए डेटाग्रिड का उपयोग कर रहा हूं। मैंने डेटाग्रिड को 50 के पेजसाइज के साथ कॉन्फ़िगर किया।
उपलब्ध स्क्रीन सभी वस्तुओं को प्रदर्शित करने के लिए पर्याप्त नहीं है और इस प्रकार एक लंबवत स्क्रॉलबार दिखाया गया है (यह वास्तव में डेटाग्रिड का उपयोग करने के लिए मुख्य उद्देश्य है)।
मैंने आइटम का चयन करने में सक्षम होने के लिए डेटाग्रिड में एकल चयन मॉडल संलग्न किया।
यह अभी तक ठीक काम करता है।जीडब्ल्यूटी 2.4 डेटाग्रिड स्वचालित स्क्रॉलिंग किसी आइटम का चयन करते समय

हालांकि मेरे पास एक और विजेट भी है जिसके साथ उपयोगकर्ता बातचीत कर सकता है। उस उपयोगकर्ता कार्रवाई के आधार पर डेटाग्रिड का एक आइटम चुना जाना चाहिए।
कभी-कभी चयनित आइटम दृश्यमान स्क्रीन क्षेत्र में नहीं होता है और उपयोगकर्ता को इसे देखने के लिए डेटाग्रिड में स्क्रॉल करना पड़ता है।
क्या स्वचालित रूप से या मैन्युअल रूप से स्क्रॉल करने का कोई तरीका है, ताकि चयनित आइटम दिखाई दे?
मैंने डेटाग्रिड के JavaDocs की जांच की और ऐसा करने के लिए कोई उचित विधि या कार्य नहीं मिला।

उत्तर

9

यह नहीं पता कि यह काम करता है, लेकिन आप चयन के लिए पंक्ति तत्व प्राप्त करने का प्रयास कर सकते हैं और scrollIntoView विधि का उपयोग कर सकते हैं।

उदाहरण कोड:

dataGrid.getRowElement(INDEX_OF_SELECTED_ITEM).scrollIntoView(); 
+1

सुझाव के लिए धन्यवाद। यह ठीक काम करता है। यहां पूरा कोड है: डेटाग्रिड .getRowElement (dataGrid.getVisibleItems()। IndexOf (MyObject)) scrollIntoView(); –

2

इसमें कोशिश करने के लिए समय नहीं है, लेकिन डेटाग्रिड इंटरफ़ेस हैसरो को लागू करता है, और हैसरोज़, अन्य चीजों के साथ, सेटविज़िबलरेंज नामक एक विधि है। आपको उस आइटम की पंक्ति संख्या को जानने की आवश्यकता है जिसे आप फोकस करना चाहते हैं, और उसके बाद दृश्य संख्या को उस संख्या से n + 50 तक सेट करें। इस तरह डेटाग्रिड उस आइटम को शीर्ष पर रखने के लिए रीसेट करेगा (या शीर्ष के पास यदि यह डेटाग्रिड का समर्थन करने वाली सूची के अंतिम 50 तत्वों में है)। अपने डेटाग्रिड को फिर से निकालना न भूलें।

क्या आपने इसे पहले ही देखा है? यदि ऐसा है, तो मुझे आश्चर्य होगा कि यह काम नहीं करता है।

ओह, और चूंकि यह एक विजेट दूसरे से बात कर रहा है, तो शायद आपके पास कुछ संदेश सेट अप और कुछ संदेश हैंडलर हैं ताकि जब उपयोगकर्ता उस दूसरे विजेट के साथ इंटरैक्ट करता है और आइटम का चयन करता है, तो संदेश इवेंटबस पर आग लग जाता है और उस संदेश के लिए एक हैंडलर मैंने बताई गई लाइनों के साथ डेटाग्रिड को ठीक कर दिया है। मुझे लगता है कि आपको यह तार खुद करना होगा।

+0

सुझाव के लिए धन्यवाद। मैंने किसी अन्य सेलटेबल में ऐसा कुछ लागू किया जहां मैं सेलटेबल ऊंचाई की गणना करता हूं ताकि मुझे कोई स्क्रॉलबार न मिले। हालांकि मैंने डेटाग्रिड पर स्विच करने का कारण स्क्रॉलिंग की क्षमता थी। बेशक आपका सुझाव काम करेगा। हालांकि मैं प्रारंभिक जानकारी को फिर से चित्रित करना चाहता हूं जो दिखाया गया है आइटम का चयन करके बदला नहीं जाता है। प्रेजेंटर के माध्यम से बातचीत की जाती है (मैं जीडब्ल्यूटीपी का उपयोग कर रहा हूं)। दोनों विजेट एक दृश्य में हैं और संचार ठीक काम कर रहा है। –

6

काम करता है इसके बाद के संस्करण जवाब बहुत अच्छी तरह से है, हालांकि यदि ग्रिड अपने विंडो की तुलना में व्यापक है और एक क्षैतिज स्क्रॉल पट्टी है, यह भी सही करने के लिए सभी तरह से स्क्रॉल जो बहुत कष्टप्रद है । मैं इसे नीचे स्क्रॉल करने में सक्षम था और चयनित पंक्ति में पहला सेल प्राप्त करके बाईं ओर स्क्रॉल किया गया था और फिर उसे इसे देखने में स्क्रॉल कर रहा था।

dataGrid.getRowElement(dataGrid.getVisibleItems().indexOf(object)).getCells().getItem(0).scrollIntoView(); 
1

मेरे समाधान, थोड़ा बेहतर:

dataGrid.getRow(model).scrollIntoView(); 
1

मैं ऊपर कर सीमा अपवाद के बाहर हो गया।

मैंने इसे डेटाग्रिड में स्क्रॉलपैनल प्राप्त करने का हल किया और स्क्रॉलपैनल पर .scrollToTop() और इसी तरह उपयोग किया। कें http://code.google.com/p/google-web-toolkit/issues/detail?id=6865

0

के रूप में बताया है, यह कष्टप्रद है scrollIntoView के बाद "scrollToRight" प्रभाव: हालांकि, डेटा ग्रिड मैं इस टिप्पणी का इस्तेमाल किया था में ScrollPanel तक पहुँचने के लिए।मेरे बाद, केम का समाधान आधार की तुलना में बेहतर व्यवहार देता है क्योंकि आमतौर पर तालिका में पहले कॉलम अधिक अर्थपूर्ण होते हैं। मैंने स्क्रॉल को लागू करने से पहले बाईं ओर के पहले दिखाई देने वाले कॉलम की गणना करके और फिर स्क्रॉल करने से पहले पंक्ति के पहले कॉलम को क्षैतिज रूप से स्क्रॉल किया, जो उसके दृष्टिकोण को थोड़ा सा बढ़ाता है।

अंतिम नोट: कॉलम पूर्ण बाएं "51" के खिलाफ परीक्षण किया जाता है। यह एक मूल्य है जिसे मैंने ब्राउज़र के डेवलपर टूल में जेएस मानों को देखकर "प्रयोगात्मक" पाया, मुझे लगता है कि यह तालिका की शैली पर निर्भर करता है, आपको इसे बदलने/गणना करने की आवश्यकता हो सकती है।

कोड नीचे

:

public void scrollIntoView(T next) { 
     int index = datagrid.getVisibleItems().indexOf(next); 
     NodeList<TableCellElement> cells = datagrid.getRowElement(index).getCells(); 
     int firstVisibleIndex = -1; 
     for(int i=0; i<cells.getLength() && firstVisibleIndex<0;i++) 
      if(UIObject.isVisible(cells.getItem(i)) && (cells.getItem(i).getAbsoluteLeft() > 51) && (cells.getItem(i).getAbsoluteTop() > 0)) 
       firstVisibleIndex = i; 

     cells.getItem(firstVisibleIndex>=0? firstVisibleIndex : 0).scrollIntoView(); 
}