2011-05-30 4 views
5

seçin. Ne yapmaya çalışıyorum kullanıcı otomatik/check elemanlarının farklı bir dizi işaretini izin HücreTablosu dışında bir dizi düğme sahip olmaktır (örneğin işaretini/Tümü kontrol, ama ben daha karmaşık kurallar olmasını istiyorum). Anlamıyorum neGWT HücreTablosu programlı bir CheckBoxCell sütun ile bir HücreTablosu var CheckBoxCell

elemanını (I satır/sütun değerlerine aracılığıyla varsayalım ???) erişebilir ve almak/değerini ayarlamak için nasıl.

kimse bana bunu çözmek için anlamaya yardımcı olabilir misiniz?

cevap

15

onay kutusunu için "seçim" bağlamak ve kolayca seçmek için istediğini varsayarak Bir dizi öğeyi programsal olarak (incelik: kutucukları işaretlemekten ziyade onay kutusunu işaretleyerek seçeceğiniz öğeleri seçin), bir MultiSelectionModel kullanırsınız. Sen http://gwt.google.com/samples/Showcase/Showcase.html#!CwCellTable örnek kod bulacaksınız

, yani: Sonra

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

, bir öğeyi seçin (ve onay kutusu otomatik olarak kontrol etmelidir), sadece yapacağız:

selectionModel.setSelected(item, true); 

ve benzer şekilde seçili öğelerin tümünü selectionModel.getSelectedSet() ile alabilirsiniz.

+0

Teşekkür vermek ama benim böyle değil edeceğiz: Ben kontrol etmek istemiyorum/bir tablo seçim yoluyla işaretini ziyade tablonun dışında bir dizi düğme kullanarak. Bağlama, sütun öğesinin ve tablonun dışındaki bir düğmenin – Noya

+0

arasındadır. Düğmenin tıklama işleyicisi, yalnızca seçim modelindeki uygun öğeleri "seçmesi" gerekir ('clear()' + 'setSelected (öğe, doğru)') ve onay kutularının durumu buna göre (otomatik olarak) güncellenir. –

+0

@ThomasBroyer Bir "AsyncDataProvider" ile birden fazla sayfadaki tüm öğeleri seçmeye nasıl giderim? – Nobody

3

ben size HücreTablosu kurdum bilmiyorum, ama kendisine bağlı bir DataProvider olduğunu varsayalım. ListDataProvider veya AsyncDataProvider. Satırlarınızın durumunu değiştirmek için sağlayıcıdaki verileri değiştirmek istiyorsunuz. İşte

seçkin için basit bir örnek/Bir HücreTablosu ve onay kutusu bir UiBinder var varsayarak, tüm seçimini kaldırmak:

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

teşekkürler. Bir AsyncDataProvider kullanıyorum Benim durumumda ... Ben senin örneğini takip etmeye ve daha sonra geribildirim cevap için – Noya