Javascript-форум (https://javascript.ru/forum/)
-   ExtJS (https://javascript.ru/forum/extjs/)
-   -   Обращение к свойствам grid (https://javascript.ru/forum/extjs/13497-obrashhenie-k-svojjstvam-grid.html)

lastbronetrain 01.12.2010 00:02

Обращение к свойствам grid
 
Подскажите, как можно обратиться к свойствам, например задать store, columns, title и т.д
я имею ввиду изменение значений этих свойств в ходе программы.
возможно ли это?

underW 01.12.2010 00:09

да, можно. Самый простой пример:

oGrid.setTitle("bla-bla")/*изменить заголовок таблицы*/

lastbronetrain 01.12.2010 00:14

про title нашел, а вот как store установить?

underW 01.12.2010 00:17

store ты указываешь в Object config когда описываешь таблицу.

new Ext.grid.GridPanel({store: oStore})

lastbronetrain 01.12.2010 00:23

это я понимаю
вот в чем дело:
а хочу создать один grid, в котором бы могли отображаться данные из разных таблиц с разной структурой.
например при выборе меню "Клиенты" отображалась таблица клиентов, при выборе "Официанты" таблица официантов.
Это вообще возможно?
У меня 8 таблиц и 8 grid'ов, я хотел бы сделать все в одном

underW 01.12.2010 00:26

эээ, в моем понимании grid == таблица

lastbronetrain 01.12.2010 00:29

возможно ли изменять структуру таблицы динамически?

underW 01.12.2010 01:08

могу грубо ошибаться, но я думаю, что динамически переделывать таблицу нельзя. Например, сменить store. ну вот как ты его сменишь?
никак.
А давай, допустим, что мы можем сменить store, если мы сменили store, значит теперь должны менять и columns, хм, получаем в результате переделанную новую таблицу, бред полный.

Мой ответ - нет.

DenQ 01.12.2010 01:15

А я считаю что возможно.
Просто нужно при разных условиях подгружать разные сторы, и в зависисмости все от тех же условий формировать структуру грида...
Но соглашусь, это хоть и реализуемо, но довольно хлопотно... намного легче создать несколько табов и раскидать по ним гриды с разными сторами...Зачем все усложнять?
Слишком много работы...

lastbronetrain 01.12.2010 01:21

Цитата:

Сообщение от DenQ (Сообщение 81655)
А я считаю что возможно.
Просто нужно при разных условиях подгружать разные сторы, и в зависисмости все от тех же условий формировать структуру грида..

вот именно это я и собираюсь сделать

поэтому как в зависимости от условия установить новое значение store и columns?

var grid = Ext.getCmp('myGrid'); 
grid.store = waitersStore;// <-как это сделать правильно
grid.columns = cmWaiters;// ?

underW 01.12.2010 01:28

grid.store = waitersStore;// <-а только так

lastbronetrain 01.12.2010 01:34

Объясню для чего я это затеял (может найдется другое решение)

Окно у меня имеет разметку border.
На окне имеется выдвижная панель, которая имеет
region : 'east'
и выдвигается влево. Вместе с ней изменяет свои размеры и grid который имеет region : 'center'.
Проблема в том, что у меня 8 grid'ов, а
region : 'center'
актуален только для одного, поэтому когда панель меняет свои размеры остальные grid'ы свои размеры не меняют.
Например у грида Клиенты стоит region center, когда я выбираю таблицу официанты (все остальные таблицы невидимы) она уже не меняет свои размеры вместе с панелью.
Это мне необходимо устранить.

underW 01.12.2010 01:40

блин,

oGrid.reconfigure( Ext.data.Store store, Ext.grid.ColumnModel colModel )

underW 01.12.2010 01:46

у тебя есть Viewport c layout:'border'

Viewport имеет items Ext.Panel({region: 'east'})

создай еще один Ext.Panel({region:'center'}) и запихни в него свои таблицы

и по идее, меняется размер панели, и будут подгоняться таблицы внутри панели.

Думаю, ты просто не до конца продумал свой layout и пытаешься решить проблему совсем не теми методами. ну тебе видее

lastbronetrain 01.12.2010 11:56

Попробовал реализовать то, что предложил underW. Но, к сожалению, таблицы не меняют свои размеры вместе с панелью, только если установить у панели layout : 'border', а у таблицы region : 'center', но опять же изменять размеры будет только одна таблица.

underW 01.12.2010 12:09

покажи пример реализации.

и потом, ты знаешь что 'border' - это не единственный тип layout'a, например, можно поставить 'fit'.

lastbronetrain 01.12.2010 12:53

Вот задается panel1 cо всеми гридами:
var panel1 = new Ext.Panel({
             layout : 'border',
             //autoScroll : true,
             split  : true,
             region : 'center',
             items  : [
                        grid,
                        waitersGrid,
                        stolikiGrid,
                        bludaGrid,
                        napitkiGrid,
                        zakaziGrid,
                        zakaziBludGrid,
                        zakaziNapitkovGrid,
             ]
   });


Вот задается panel2 с datepicker:

var datePickerPanel = new Ext.Panel({
     region      : 'east',
     title       : 'Дата и время',
     collapsible : true,
     split       : true,
          // margins     : '3 0 3 3',
          //cmargins    : '3 3 3 3',
     width       : 204,
     items       : [datepicker]
  });


Вот главное окно:
var win = new Ext.Window ({
    id          : 'mainWindow',
    title       : 'Ресторан "Рауль Дьюк"',
    height      : 360,
    width       : 935,
    layout      : 'border',
    //autoScroll  : true,
    modal       : true,
    border      : true,
    closabled   : false,
    //region      : 'center',
    plain       : true,
    resizable   : false,
    collapsible : true,
    items       : [

                      winItems // эти две панели
                   ],
    tbar 	: mainToolBar
  })


Вот грид Клиенты:
var grid = new Ext.grid.EditorGridPanel({
      region         : 'center',
      x              : 0, //задаем координаты расположения grid
      y              : 0,
      title          : 'Клиенты', /*'Клиенты'*/
      id             : 'myGrid',
      height         : 300,
      width          : 716,
      trackMouseOver : false,
      frame          : true,
      style          : {visibility : 'visible'},
      columnLines    : true,
      stripeRows     : true,

      viewConfig: {
            forceFit:true
        },
      bbar         : toolBar,
      store        : jsonStore, /*jsonStore*/
      columns      : 
      [
          new Ext.grid.RowNumberer(),
          {header : '№',/*hidden : true,*/dataIndex: 'id_klients'},
          {header : 'Фамилия', sortable: true, dataIndex: 'surname', editor: textField},
          {header : 'Имя', dataIndex: 'name', editor : textField},
          {header : 'Отчество', dataIndex: 'patronymic', editor : textField},
          {header : 'Дата', sortable: true, dataIndex: 'date', editor: date_editor, renderer : Ext.util.Format.dateRenderer('d/m/Y')},
          {header : 'Номер столика',sortable: true, dataIndex: 'id_stolika',editor : stolik_edit},
          {header : 'Официант', dataIndex: 'waiters_name', editor: waiters_edit}
      ]
  });


Вот таблица официантов:
var waitersGrid = new Ext.grid.EditorGridPanel({
        region         : 'center',
		id          : 'waitersGrid',
        //region         : 'center',
        title       : 'Официанты',
        height      : 300,
        width       : 716,//716
        frame       : true,
        columnLines : true,
        stripeRows  : true,
        x           : 0,
        y           : 0,
         viewConfig: {
            forceFit:true
        },
        style       : {visibility : 'hidden'},
        bbar        : toolBarWaiters,
        store       : waitersStoreDB,
        columns     : [
            new Ext.grid.RowNumberer(),
            {header : 'id', dataIndex : 'id_waiters'},
            {header : 'Имя официанта', dataIndex : 'waiters_name', editor: textField},
            {header : 'Стаж работы', dataIndex : 'stazh', editor : numberField}
        ]
  });

underW 01.12.2010 13:34

глянь на вот это, может это подойдет:

Ext.onReady(
		function(){
			
			Ext.Msg.alert("1", "2");
			
			var oFirstGrid = new Ext.grid.GridPanel({
								title: 'oFirstGrid',
								store	:[] ,
								flex	:1,
								columns	: [
										{header:"one"}, 
										{header:"two"},
										{header:"three"}],
										
								viewConfig: {
        								forceFit: true
  							  }})
  							  
  			var oSecondGrid = new Ext.grid.GridPanel({
			 					title: 'oSecondGrid',
			 					flex	:1,
								store	:[] ,
								columns	: [
										{header:"one"}, 
										{header:"two"},
										{header:"three"}],
										
								viewConfig: {
        								forceFit: true
  							  }})
  							  
  			var oThreeGrid = new Ext.grid.GridPanel({
			 					title: 'oThreeGrid',
			 					flex	:1,
								store	:[] ,
								columns	: [
										{header:"one"}, 
										{header:"two"},
										{header:"three"}],
										
								viewConfig: {
        								forceFit: true
  							  }})
			
			
			var oEastPanel = new Ext.Panel({
						region : 'east',
						title	: "oEastPanel",
						width	: 200,
						split	: true
			})
			
			
				var oCenterPanel = new Ext.Panel({
				
						region : 'center',
						title	: "oCenterPanel",
						layout:'vbox',
layoutConfig: {
    align : 'stretch',
    pack  : 'start',
},
items: [
        oFirstGrid,oSecondGrid, oThreeGrid
]
						
			})
			
			
			new Ext.Viewport({
			
			title	: 'viewPort',
			layout	: 'border',
			items	:[oEastPanel, oCenterPanel]
			
			})
			
				
		})


двигаем oEastPanel - автоматически меняется размер таблиц в oCenterPanel.

lastbronetrain 01.12.2010 13:57

Спасибо за помощь
Все решилось намного проще:
у всех таблиц я установил anchor : '100%' и теперь они меняют свои размеры относительно контейнера, т.е. относительно панели, так что спасибо за идею с панелью

Ex_Soft 06.12.2010 23:19

metachange + reconfigure


Часовой пояс GMT +3, время: 12:06.