2012-01-03 6 views
5

Я новичок в Ext JS. Я работаю на панели сетки, в которой, когда я выбираю/выбираю любую из строк, тогда определенные данные, относящиеся к выбранной строке, отображаются на панели ниже сетки. Также, когда окно загружено, первое должно быть выбрано/выделено по умолчанию. В настоящее время панель сетки & отображается правильно. Даже данные, относящиеся к выбранной строке, отображаются на панели, но строка не подсвечивается. Я пробовал методы grid.focusRow(0) & grid.getRow(0).highlight(), но они не работают. Ниже мой код.Выделение/выбор строки сетки в ExtJS

//the js file code 
initComponent : function() { //within the window instance 

    var single = false; 
    var store = new Ext.data.XmlStore({//all necessary fields added}); //store 
    HttpUtil.syncCall(this.url, "GET", this.loadStore, store,this); 
    var acctTplMarkup = [//the fields here are displayed on row selection ]; 
       /*The template for displaying the details of the selected row */ 
       this.acctTpl = new Ext.Template(acctTplMarkup); 
    //check for request type, if type is range of checks create the grid 
    if (single == false) { 
     var gridView = new Ext.grid.GridView(); 
     var colModel = new Ext.grid.ColumnModel([ { 
      header : 'Status', 
      dataIndex : 'status' 
     }, { 
      header : 'Message', 
      dataIndex : 'message' 
     } ]); 
     var selModel = new Ext.grid.RowSelectionModel({ 
      singleSelect : true 
     }); 
     grid = new Ext.grid.GridPanel({ 
              ... 
         listeners : { 
       render : function(grid) { 
        Ext.getCmp('check').store.on('load',function(store, records, options) { //check is the id value for the window instance 
         grid.getSelectionModel().selectFirstRow(); 
        }); 
       } 
      } 
    }); //gridPanel 
    } //if 
    /* If request type is range select then display the grid */ 
       ... 
    if (single == false) { 
    grid.getSelectionModel().on('rowselect', function(sm, rowIdx, r) { 
Ext.getCmp('check').acctTpl.overwrite(Ext.getCmp('detailPanel').body, r.data); 
     }); //rowselect 
    } //if 

    Ext.apply(this, { 
            ... 
      listeners : { 
      'afterrender' : function(){ 
      Ext.getCmp('check').acctTpl.overwrite(Ext.getCmp('detailPanel').body, this.store.getAt(0).data,true); 
      } 
     } 
    }); 
    Check.superclass.initComponent.apply(this, arguments); 

}, //initComponent 

Данные из хранилища данных загружается & отображается должным образом, но только строка не выделена. Может ли кто-нибудь сказать мне, где я ошибся?

ответ

10

getRow метод в Ext.grid.GridPanel. Однако есть один в Ext.grid.GridView.

Чтобы выделить строку, которую вы должны сделать следующее:

var row = grid.getView().getRow(0); // Getting HtmlElement here 
Ext.get(row).highlight(); // Getting element wrapper and using its "highlight" method 

Для выполнения выбора строки вы используете SelectionModel GRID в:

grid.getSelectionModel().selectRow(0) 
+0

Эй, спасибо за ваш ответ. Я уже пробовал эти методы, но они не работают. Моя сетка завершена, но почему-то я не могу выделить первую строку. Есть ли другой путь? –

+0

Вы получаете какие-либо ошибки в упомянутых методах? Все возможные способы решения проблемы приведут к дополнительным проблемам в будущем, поэтому лучше попробовать работать с существующим способом, прежде чем пытаться сделать что-либо самодельное. – Li0liQ

+2

'getView(). GetRow' не существует в ExtJS 4; используйте 'getView(). getNode'. –

1

Чтобы выбрать строку в определенном индексе, используйте выбор модель.

Ext.grid.GridPanel.getView().getSelectionModel().select(index); 
6

Компонент: Ext.grid.Panel

Версия: 4.0.0

Для того, чтобы выбрать один элемент и удалить предыдущий выбор:

grid.getSelectionModel().select(0); 

Для того, чтобы выбрать один и сохранить предыдущий выбор:

grid.getSelectionModel().select(0, true); 
+0

Отличный :) это хорошо работает для меня спасибо :) –

Смежные вопросы