2011-11-18 12 views
16

पर सॉर्ट सॉर्ट करें मेरे पास एक Gwt सेलटेबल है। हेडर पर क्लिक करने से कॉलम ठीक से टाइप होते हैं। लेकिन पृष्ठ लोड पर कॉलम डिफ़ॉल्ट रूप से क्रमबद्ध नहीं होते हैं। पृष्ठ लोड होने पर मैं सही से अधिक कॉलम को सॉर्ट करना चाहता हूं।Gwt सेलटेबल कॉलम

उत्तर

12

आप इस तरह के रूप में getColumnSortList() उपयोग कर सकते हैं और स्तंभ आप क्रमित करना चाहते हैं धक्का,:

dataGrid.getColumnSortList().push(columnToSortBy); 

तालिका आरोही क्रम में दिए गए स्तंभ के अनुसार क्रमबद्ध किया जाएगा।

इस विधि को दो बार कॉल करना, परीक्षण के लिए एक चेक ट्रिगर करेगा यदि दिए गए कॉलम को सूची में पहले से ही धक्का दिया गया है, और यदि ऐसा है तो यह अवरोही क्रम में क्रमबद्ध हो जाएगा, ताकि अवरोही क्रम में कॉलम द्वारा क्रमबद्ध तालिका प्राप्त करने के लिए:

dataGrid.getColumnSortList().push(columnToSortBy); 
dataGrid.getColumnSortList().push(columnToSortBy); 

दृश्य के पीछे, स्तंभ स्थिति 0. एक ही सूची प्रत्येक स्तंभ शीर्ष लेख क्लिक पर अद्यतन किया जाता है ColumnSortList बुलाया तालिका में एक आंतरिक सूची में धकेल दिया जाता है।

यकीन है कि आप इस विधि कॉल आप स्तंभ प्रारंभ के बाद करें।

+4

मैं दिखाए गए अनुसार पंक्ति में दो बार पुश() को कॉल कर रहा हूं लेकिन, हालांकि तीर इसे दो बार क्रमबद्ध दिखाता है, वास्तविक डेटा नहीं है। नहीं सोच सकता कि यह क्यों हो रहा है। – slugmandrew

+0

यहां पर, मुझे नहीं पता कि –

+2

मुझे उस समस्या का समाधान हुआ और समाधान को वैकल्पिक उत्तर के रूप में पोस्ट किया गया। –

6

मैं सुझाव देंगे कि आप डेटा आप पहले से ही हल कर प्रदर्शित करने के लिए जा रहे हैं पुनः प्राप्त। अगर ऐसी बात है तो केवल (आरोही या अवरोही) सही तरह आइकन सेट करने के लिए:

/** 
* Displays the appropriate sorted icon in the header of the column for the given index. 
* 
* @param columnIndex 
*   of the column to mark as sorted 
* @param ascending 
*   <code>true</code> for ascending icon, <code>false</code> for descending icon 
*/ 
public void setSortedColumn(int columnIndex, boolean ascending) { 
     Column<T, ?> column = table.getColumn(columnIndex); 
     if (column != null && column.isSortable()) { 
      ColumnSortInfo info = table.getColumnSortList().push(column); 
      if (info.isAscending() != ascending) { 
       table.getColumnSortList().push(column); 
      } 
     } 
} 

डेटा पुन: प्राप्त आप उसी तरह आप इसे जब एक कर सूची सॉर्ट कर सकते हैं इससे पहले कि पृथक नहीं किया जा सकता है उपयोगकर्ता इसे प्रदर्शित करने से पहले Comparator के साथ शीर्षलेख (onColumnSort(ColumnSortEvent event)) पर क्लिक करता है।

+0

आपका कोड बहुत उपयोगी था। धन्यवाद। – slugmandrew

+0

यह सुनिश्चित करने के लिए उपयोगी था कि जेफ एलन के समाधान का उपयोग करते समय डिफ़ॉल्ट सॉर्टिंग आरोही और अवरोही के बीच चक्र नहीं था। –

24

मौजूदा जवाब ... एक cellTable की तरह सूची (के रूप में getColumnSortList() समारोह द्वारा पहुँचा) के एक जोड़े को स्पष्ट करने के केवल निर्धारित करता है कि तालिका के हेडर के राज्य है, लेकिन वास्तव में किसी भी डेटा को सॉर्ट नहीं है।

@ सुझाव z00bs रूप में, यह, बाह्य डेटा को सॉर्ट करने यदि संभव हो तो बुद्धिमान हो सकता है। यदि आप जानते हैं कि डेटा को पूर्व-क्रमबद्ध किया जा रहा है, तो आपको getColumnSortList().clear() और getColumnSortList().push() फ़ंक्शंस का उपयोग अपने उपयोगकर्ताओं से संवाद करने के लिए किया जाना चाहिए कि डेटा कैसे क्रमबद्ध किया गया हो।

अगर, हालांकि, आप CellTable वास्तव में डेटा को सॉर्ट करना चाहते हैं, तो आप वास्तव घटक डेटा क्लाइंट साइड सॉर्ट करने के लिए CellTable मजबूर करने के लिए एक घटना को गति प्रदान करने की जरूरत है जा रहे हैं। ऐसा करने के लिए, आप इस तरह के रूप में, राज्य ColumnSortEvent.fire() विधि का उपयोग कर सकते हैं:

ColumnSortEvent.fire(myTable, myTable.getColumnSortList()); 

यह एक घटना है जो शीर्ष लेख की वर्तमान स्थिति के आधार पर डेटा की छंटाई संभालती ट्रिगर किया जाएगा। तो आप पहले हेडर की वांछित प्रारंभिक क्रम स्थिति सेट कर सकते हैं, और फिर इस लाइन को निष्पादित करने के लिए वास्तव में डेटा ऑर्डरिंग हेडर में प्रदर्शित वर्तमान सॉर्ट स्थिति को प्रतिबिंबित करने के लिए निष्पादित करें।

+1

मैंने कॉलम पर कुछ फ़िल्टर लागू करने के बाद कॉलम को पुनः क्रमबद्ध करने में सहायता के लिए इस उत्तर का उपयोग किया। धन्यवाद! – Devesh

+0

Oooooooooooooooooooooooh मैंने सोचा कि मैं पागल हो रहा था, धन्यवाद :) – Manu