0

DatePickerCellであるセルをクリックすると、テーブルの選択が機能しなくなります。

次の表には、日付、テキストの2つの列しかありません。

GWTでテスト済みは2.4および2.5Chrome、IE9でテスト済み

投稿されたコードに何か問題がありますか?

SelectionModelとDateCellPickerを使用したDataGridの動作例へのリンクはありますか?その選択は正常に機能しますか?

実用的な例は私の質問に答えるでしょう。

アップデート:

完全な実行可能な例を投稿しました。

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

1 に答える 1

1

AbstractCellTableのソースコードがどのように見えるかから、実際には、KeyboardSelectionPolicy.BOUND_TO_SELECTIONを使用するか、選択を処理する少なくとも1つのセルタイプを指定する必要があります。

Googleにバグレポートを提出しました:

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

于 2013-03-07T17:02:13.297 に答える