Изменение размера сетки при изменении размера окна браузера

#extjs

#extjs

Вопрос:

Я использовал monitorResize:true при отображении сетки в окне ( Ext.Window ). Но это не помогает.

 CListingEditorGrid =  new Ext.grid.EditorGridPanel({
      id: 'CListingEditorGrid',
      renderTo:'grid_div',
      viewConfig:{
        forceFit:true // CHANGED THIS
    },
      store: CDataStore,
      cm: CColumnModel,
      sm:selmodel,
      enableColLock:false,
      clicksToEdit:1,
      selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
      plugins:[filters],
      bbar: new Ext.PagingToolbar(
    {
    store:CDataStore,
    pageSize:10,
    plugins: [filters]
    }),
      tbar: [{
         text: 'Add Contact',
         tooltip: 'Add Contact',
         handler: displayFormWindow
      },
      {
              text:'Delete Contact',
              tooltip:'Delete Contact',
              handler:deleteContacts
      }
      ]
    });
CListingWindow = new Ext.Window({
      id: 'CListingWindow',
      title: 'Contacts List',
      closable:true,
      width:1000,
      height:500,
      layout: 'fit',
      items: [CListingEditorGrid],
      renderTo:'grid_div',
      resizable:false

    });
  

Ответ №1:

Несколько ошибок:

  1. renderTo не следует использовать два компонента и указывать на один и тот же div. Это неправильный способ.

  2. Вы можете отобразить все это целиком, даже не используя элементы. Попробуйте следующий код:

 

 var CListingEditorGrid = new Ext.grid.EditorGridPanel({
    //normally, we don't assign ids if there is no obvious reason to use this.
    //id: 'CListingEditorGrid',

    //We don't need this as this grid will be rendered into the window
    //renderTo: 'grid_div',
    viewConfig: {
        //forceFit is used by the GridView, so to have the GridView
        //fits into the grid, not grid fits into the window
        forceFit: true
    },
    store: CDataStore,
    cm: CColumnModel,

    //You don't need to have this
    //sm: selmodel,
    enableColLock: false,
    clicksToEdit: 1,
    //The default sm is already multi-selectable so you could probably
    //remove this selModel.
    /*
    selModel: new Ext.grid.RowSelectionModel({

        singleSelect: false
    }),
    */
    plugins: [filters],
    bbar: new Ext.PagingToolbar({
        store: CDataStore,
        pageSize: 10,
        plugins: [filters]
    }),
    tbar: [{
        text: 'Add Contact',
        tooltip: 'Add Contact',
        handler: displayFormWindow
    }, {
        text: 'Delete Contact',
        tooltip: 'Delete Contact',
        handler: deleteContacts
    }]
});

var CListingWindow = new Ext.Window({
    //id: 'CListingWindow',
    title: 'Contacts List',
    //closable: true,
    width: 1000,
    height: 500,
    layout: 'fit',
    items: [CListingEditorGrid],
    //renderTo: 'grid_div',
    resizable: false
});

//Show this window
CListingWindow.show();
  

Сообщите нам, если это сработает. Я еще не тестировал это. Но сетка должна хорошо соответствовать окну с помощью параметра layout:'fit' .

Комментарии:

1. Это работает, проблема была в том, как вы сказали в renderTo — Спасибо

2. Нет проблем 🙂 Вы можете узнать больше из предоставленных примеров или ознакомиться с их исходными кодами, много полезного!

Ответ №2:

предполагая, что вы используете ext 3…

попробуйте это:

 var store = new Ext.data.ArrayStore({
    fields: [{name: 'Id'},{name: 'Name'},{name: 'Email'}],
    data: [
        ['1','Egy','egy.mohammad.r@callysta-engineering.com'],
        ['2','Ebo','mohammad.erdin@gmail.com']
    ]
});
var grid = new Ext.grid.GridPanel({
    store: store,
    viewConfig :{
        forceFit : true // thisfor force fit the grid (no horizontal scroll)
    },
    columns: [
        {header: 'Id',dataIndex: 'Id'},
        {header: 'Name',dataIndex: 'Name'},
        {header: 'Email', dataIndex: 'Email'}
    ]
});
var win = new Ext.Window({
    layout:'fit',
    title : "resizeable",
    width:500,
    height:300,
    closeAction:'hide',
    items: [grid]
});
win.show(this);
  

здесь 2 ошибки :

  1. monitorResize не является одним из видов конфигураций в Ext.Window или Ext.grid.GridPanel
  2. когда вы используете Ext.Window и хотите разместить содержимое внутри .. используйте layout: "fit" config.

Комментарии:

1. Я внес изменения, но это не работает. Я визуализирую ее в элементе <div>, и изменения выполняются с использованием forceFit: true в GridEditorPanel, и я уже использовал layout:’fit’

2. попробуйте показать мне свой текущий код, обновив свой вопрос.. может быть, я мог бы вам помочь .. (я думаю, что я не понимаю)

3. я вижу проблему… вы определяете a CListingEditorGrid и отображаете его в a grid_div … и вы определяете окно, содержащее CListingEditorGrid и отображающее его grid_div также … я думаю, вам не нужно окно, если вы хотите отобразить editorGridPanel в div… но если это так, я поищу ответ для вас .. я отредактирую свой ответ, когда получу его…