2013-03-01 50 views
0

当我单击DatePickerCell的单元格时,表格选择不再起作用。下面DatePickerCell打破表格选择

表刚刚2列:日期,文本

与GWT测试的2.4和2.5 测试了Chrome浏览器,IE9

有什么不对的代码贴?

是否有与SelectionModel和DateCellPicker的DataGrid的工作示例的链接,该选择工作正常?

一个工作示例将回答我的问题。

UPDATE:

我贴一个完整的可运行的例子。

import com.google.gwt.cell.client.DatePickerCell; 
import com.google.gwt.cell.client.FieldUpdater; 
import com.google.gwt.core.client.EntryPoint; 
import com.google.gwt.user.cellview.client.*; 
import com.google.gwt.user.client.Window; 
import com.google.gwt.user.client.ui.RootPanel; 
import com.google.gwt.view.client.SelectionChangeEvent; 
import com.google.gwt.view.client.SingleSelectionModel; 

import java.util.Arrays; 
import java.util.Date; 
import java.util.List; 
/** 
* Entry point classes define <code>onModuleLoad()</code>. 
*/ 
public class DataGridCss implements EntryPoint 
{ 

    /** 
    * A simple data type that represents a contact. 
    */ 
    private static class Contact 
    { 
     private final String address; 
     private Date birthday; 
     private final String name; 

     public Contact(String name, Date birthday, String address) 
     { 
      this.name = name; 
      this.birthday = birthday; 
      this.address = address; 
     } 
    } 

    /** 
    * The list of data to display. 
    */ 
    private static final List<Contact> CONTACTS = Arrays.asList(new Contact("John", new Date(), "123 Fourth Avenue"), new Contact("Joe", new Date(), "22 Lance Ln"), new Contact("George", new Date(),"1600 Pennsylvania Avenue")); 

    public void onModuleLoad() 
    { 
     final DataGrid<Contact> table = new DataGrid<Contact>(100); 
     table.setSize("700px", "300px"); 

     table.setKeyboardSelectionPolicy(KeyboardSelectionPolicy.ENABLED); 

     // Add a date column to show the birthday. 
     DatePickerCell dateCell = new DatePickerCell(); 
     Column<Contact, Date> dateColumn = new Column<Contact, Date>(dateCell) 
     { 
      @Override 
      public Date getValue(Contact object) 
      { 
       return object.birthday; 
      } 
     }; 

     // Add a field updater to be notified when the user enters a new name. 
     dateColumn.setFieldUpdater(new FieldUpdater<Contact, Date>() 
     { 
      @Override 
      public void update(int index, Contact object, Date value) 
      { 
       object.birthday = value; 
      } 
     }); 

     table.addColumn(dateColumn, new TextHeader("Birthday")); 

     TextColumn<Contact> addressColumn = new TextColumn<Contact>() 
     { 
      @Override 
      public String getValue(Contact object) 
      { 
       return object.address; 
      } 
     }; 

     table.addColumn(addressColumn, new TextHeader("Address")); 

     // Add a selection model to handle user selection. 
     final SingleSelectionModel<Contact> selectionModel = new SingleSelectionModel<Contact>(); 
     table.setSelectionModel(selectionModel); 
     selectionModel.addSelectionChangeHandler(new SelectionChangeEvent.Handler() 
     { 
      public void onSelectionChange(SelectionChangeEvent event) 
      { 
       Contact selected = selectionModel.getSelectedObject(); 
       if (selected != null) 
       { 
        Window.alert("You selected: " + selected.name); 
       } 
      } 
     }); 

     table.setRowCount(CONTACTS.size(), true); 
     table.setRowData(0, CONTACTS); 

     RootPanel.get().add(table); 
    } 
} 
+0

曾试图消除table.redraw();在细胞的更新方法?? – 2013-03-01 16:13:00

+0

我做过了,但仍然是同样的问题。发布的代码来自展柜。这是最简单的情况。 – Spiff 2013-03-01 16:41:47

+0

为什么当点击日期选择器单元格时选择更改被调用?它会在您更改选择时调用,即当您单击其他行时。我将再次检查展示示例,但它应该可以正常工作。 – 2013-03-01 18:12:49

回答

1

从什么AbstractCellTable的源代码的模样,你真的必须要么使用KeyboardSelectionPolicy.BOUND_TO_SELECTION或提供处理选择至少一种细胞类型。

提交bug报告与谷歌:

http://code.google.com/p/google-web-toolkit/issues/detail?id=8064

+0

感谢您的回答。你是正确的钥匙工作,我可以上下导航,空间选择一行,但行不能用鼠标选择。最主要的是用鼠标选择行 – Spiff 2013-03-08 07:01:47

+0

是否有任何与KeyboardSelectionPolicy.BOUND_TO_SELECTION对应的内容? – user1050755 2013-03-08 18:06:52