2011-05-30 14 views
5

का चयन करें मुझे एक चेकबॉक्स बॉक्स कॉलम के साथ सेलटेबल मिला है। मैं जो करने की कोशिश कर रहा हूं वह है कि सेलटेबल के बाहर बटनों का एक सेट है जो उपयोगकर्ता को तत्वों के एक अलग सेट को स्वचालित रूप से चेक/अनचेक करने देता है (उदाहरण के लिए सभी को चेक/अनचेक करें, लेकिन मैं अधिक जटिल नियम बनाना चाहता हूं)।जीडब्ल्यूटी सेलटेबल प्रोग्रामेटिक रूप से चेकबॉक्स बॉक्स

मुझे समझ में नहीं आता कि तत्व का उपयोग कैसे करें (मुझे पंक्ति/कॉल मानों के माध्यम से लगता है ???) और मान प्राप्त करें/सेट करें।

क्या कोई मुझे यह हल करने में मदद कर सकता है कि इसे कैसे हल किया जाए?

उत्तर

15

मान लिया जाये कि आप क्या चाहते हैं चेकबॉक्स को "चयन" बाँध और आसानी से चयन करने के लिए है वस्तुओं का एक गुच्छा प्रोग्रामेटिक रूप से (subtlety: आइटम का चयन करें, जिसके परिणामस्वरूप बॉक्स चेकिंग के बजाय चेकबॉक्स चेक किया जा रहा है), आप MultiSelectionModel का उपयोग करेंगे।

आप http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable में नमूना कोड मिल जाएगा, वह यह है कि:

final MultiSelectionModel<ContactInfo> selectionModel = new MultiSelectionModel<ContactInfo>(
    ContactDatabase.ContactInfo.KEY_PROVIDER); 
cellTable.setSelectionModel(selectionModel, 
    DefaultSelectionEventManager.<ContactInfo> createCheckboxManager()); 
… 
Column<ContactInfo, Boolean> checkColumn = new Column<ContactInfo, Boolean>(
    new CheckboxCell(true, false)) { 
    @Override 
    public Boolean getValue(ContactInfo object) { 
    // Get the value from the selection model. 
    return selectionModel.isSelected(object); 
    } 
}; 
cellTable.addColumn(checkColumn, SafeHtmlUtils.fromSafeConstant("<br/>")); 
cellTable.setColumnWidth(checkColumn, 40, Unit.PX); 
फिर

, किसी आइटम का चयन (और उसके चेकबॉक्स स्वचालित रूप से जाँच की है) करने के लिए, तो आप बस करेंगे:

selectionModel.setSelected(item, true); 

और आप इसी प्रकार सभी चयनित वस्तुओं का सेट selectionModel.getSelectedSet() के साथ प्राप्त कर सकते हैं।

+0

उत्तर के लिए धन्यवाद लेकिन यह मेरा मामला नहीं है: मैं तालिका चयन के माध्यम से चेक/अनचेक नहीं करना चाहता हूं बल्कि तालिका के बाहर बटन के एक सेट का उपयोग कर। बाध्यकारी कॉलम के तत्व और तालिका – Noya

+0

के बाहर एक बटन के बीच है बटन के क्लिक हैंडलर * केवल * चयन मॉडल में उचित आइटम "चयन करें" ('स्पष्ट()' + 'सेट चयनित (आइटम, सत्य)') , और चेकबॉक्स स्थिति तब तदनुसार अपडेट की जाएगी (स्वचालित रूप से)। –

+0

@ थॉमसब्रायर मैं 'AsyncDataProvider' के साथ एकाधिक पृष्ठों में सभी आइटमों को चुनने के बारे में कैसे जाउंगा? – Nobody

3

मुझे नहीं पता कि आपने अपना सेलटेबल कैसे स्थापित किया है, लेकिन मुझे लगता है कि आपके पास एक डेटा प्रदाता है। या तो एक ListDataProvider या AsyncDataProvider। आप अपनी पंक्तियों की स्थिति बदलने के लिए प्रदाता में डेटा को संशोधित करना चाहते हैं।

यहाँ एक का चयन करने के लिए एक सरल उदाहरण है/सभी का चयन रद्द करें, यह मानते हुए कि आप एक cellTable और चेकबॉक्स के साथ एक UiBinder है:

public class MyView extends Composite { 

    private class MyTableRow { 
    private boolean checked; 

    public boolean isChecked() { 
     return this.checked; 
    } 

    public void setChecked(boolean checked) { 
     this.checked = checked; 
    } 

    } 

    interface MyViewUiBinder extends UiBinder<Widget, MyView> { 
    } 

    private static MyViewUiBinder uiBinder = GWT.create(MyViewUiBinder.class); 
    private ListDataProvider<MyTableRow> provider = new ListDataProvider<MyTableRow>(); 
    @UiField(provided = true) 
    CellTable<MyTableRow> table; 

    public MyView() { 
    this.table = new CellTable<MyTableRow>(); 
    Column<MyTableRow, Boolean> checkBoxColumn = new Column<MyTableRow, Boolean>(new CheckboxCell()) { 

     @Override 
     public Boolean getValue(MyTableRow object) { 
      return object.isChecked(); 
     } 

    }; 
    this.table.addColumn(checkBoxColumn); 
    this.initWidget(uiBinder.createAndBindUi(this)); 
    } 

    @UiHandler("selectAllBox") 
    public void onSelectAllClicked(ClickEvent e) { 
    for (MyTableRow row : this.provider.getList()) { 
     row.setChecked(((CheckBox)e.getSource()).getValue()); 
    } 
    } 

} 
+0

धन्यवाद। मेरे मामले में मैं एक AsyncDataProvider का उपयोग कर रहा हूं ... मैं आपके उदाहरण का पालन करने की कोशिश करूंगा और फिर प्रतिक्रिया दें – Noya

संबंधित मुद्दे