GridPanel не может получить индекс строки в Internet Explorer - PullRequest
0 голосов
/ 21 декабря 2011

Я забираю чужой проект и сталкиваюсь с ошибкой ТОЛЬКО В ИНТЕРНЕТ-ЭКСПЛОРЕРЕ, когда пытаюсь щелкнуть строку в GridPanel. Я могу получить данные, которые правильно отображаются в таблице, но когда я нажимаю на строку, желая получить индекс строки для выполнения некоторых других вещей, я получаю «ноль» для индекса строки в IE 7 и 8. Нет проблем в FF , Chrome, Safari.

Сообщение: «0» является нулем или не является объектом Линия: 10 Char: 1601 Код: 0 URI: http://mysite.com/Proj/js/ext/adapter/yui/ext-yui-adapter.js

Сообщение: «0» является нулем или не является объектом Линия: 10 Char: 1601 Код: 0 URI: http://mysite.com/Proj/js/ext/adapter/yui/ext-yui-adapter.js

Это код для генерации значений в gridPanel:

grid.getEl().mask("Searching for codes, please wait...", true);
    AsyncCallback<LinkedHashMap<Long, Map>> acb = new AsyncCallback<LinkedHashMap<Long, Map>>() {

        public void onFailure(Throwable caught) {
             grid.getEl().unmask();
            MessageBox.alert("Failed :" + caught.getMessage());
        }

        public void onSuccess(LinkedHashMap<Long, Map> result) {

            Set key = result.entrySet();
            Iterator it = key.iterator();
             grid.setVisible(true);

            while (it.hasNext()) {
                Map.Entry en = (Map.Entry) it.next();
                Map m = (Map) en.getValue();
                String code = m.get("code").toString();
                try {

                    Date activationDate = new Date(Long.parseLong(m.get("activationtime").toString()));
                    Date deactivationDate = new Date(Long.parseLong(m.get("deactivationtime").toString()));
                    String actDateF = DateTimeFormat.getFormat("dd-MM-yyyy KK:mm:ss").format(activationDate);
                    String deactDateF = DateTimeFormat.getFormat("dd-MM-yyyy KK:mm:ss").format(deactivationDate);

                    Object[] obj = new Object[]{
                        actDateF,
                        deactDateF,
                        code
                    };


                    Record record = recordDef.createRecord(obj);
                     grid.getStore().add(record);

                } catch (Exception e) {

                    codeNotReading.add(code);
                    codeNotReading.add(e.getMessage());

                }
            }

            grid.getView().refresh();
            grid.getEl().unmask();
            if (codeNotReading.size() > 0) {
                MessageBox.alert(" \n Following code(s) cann't be added.  : " + codeNotReading.toString());
            }

        }
    };

и код для получения индекса строки:

grid.addGridCellListener(new GridCellListenerAdapter() {

      @Override
        public void onCellDblClick(GridPanel grid, int rowIndex, int colIndex, EventObject e) {                
            MessageBox.alert("Row "+rowIndex);
        }
    });

1 Ответ

0 голосов
/ 21 декабря 2011

Иногда двойной щелчок может происходить как внутри GridPanel, так и за пределами ячейки строки. Таким образом, rowIndex будет нулевым. Я советую вам поставить точку останова на строке MessageBox.alert("Row "+rowIndex); и проверить, не является ли rowIndex отрицательным или нулевым.

Если он отрицательный или нулевой, измените код onCellDblClick на следующее:

if (rowIndex != null && rowIndex >= 0) {
    MessageBox.alert("Row "+rowIndex);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...