Обращение к свойствам grid
Подскажите, как можно обратиться к свойствам, например задать store, columns, title и т.д
я имею ввиду изменение значений этих свойств в ходе программы. возможно ли это? |
да, можно. Самый простой пример:
oGrid.setTitle("bla-bla")/*изменить заголовок таблицы*/ |
про title нашел, а вот как store установить?
|
store ты указываешь в Object config когда описываешь таблицу.
new Ext.grid.GridPanel({store: oStore}) |
это я понимаю
вот в чем дело: а хочу создать один grid, в котором бы могли отображаться данные из разных таблиц с разной структурой. например при выборе меню "Клиенты" отображалась таблица клиентов, при выборе "Официанты" таблица официантов. Это вообще возможно? У меня 8 таблиц и 8 grid'ов, я хотел бы сделать все в одном |
эээ, в моем понимании grid == таблица
|
возможно ли изменять структуру таблицы динамически?
|
могу грубо ошибаться, но я думаю, что динамически переделывать таблицу нельзя. Например, сменить store. ну вот как ты его сменишь?
никак. А давай, допустим, что мы можем сменить store, если мы сменили store, значит теперь должны менять и columns, хм, получаем в результате переделанную новую таблицу, бред полный. Мой ответ - нет. |
А я считаю что возможно.
Просто нужно при разных условиях подгружать разные сторы, и в зависисмости все от тех же условий формировать структуру грида... Но соглашусь, это хоть и реализуемо, но довольно хлопотно... намного легче создать несколько табов и раскидать по ним гриды с разными сторами...Зачем все усложнять? Слишком много работы... |
Цитата:
поэтому как в зависимости от условия установить новое значение store и columns? var grid = Ext.getCmp('myGrid'); grid.store = waitersStore;// <-как это сделать правильно grid.columns = cmWaiters;// ? |
grid.store = waitersStore;// <-а только так |
Объясню для чего я это затеял (может найдется другое решение)
Окно у меня имеет разметку border. На окне имеется выдвижная панель, которая имеет region : 'east'и выдвигается влево. Вместе с ней изменяет свои размеры и grid который имеет region : 'center'. Проблема в том, что у меня 8 grid'ов, а region : 'center'актуален только для одного, поэтому когда панель меняет свои размеры остальные grid'ы свои размеры не меняют. Например у грида Клиенты стоит region center, когда я выбираю таблицу официанты (все остальные таблицы невидимы) она уже не меняет свои размеры вместе с панелью. Это мне необходимо устранить. |
блин,
oGrid.reconfigure( Ext.data.Store store, Ext.grid.ColumnModel colModel ) |
у тебя есть Viewport c layout:'border'
Viewport имеет items Ext.Panel({region: 'east'}) создай еще один Ext.Panel({region:'center'}) и запихни в него свои таблицы и по идее, меняется размер панели, и будут подгоняться таблицы внутри панели. Думаю, ты просто не до конца продумал свой layout и пытаешься решить проблему совсем не теми методами. ну тебе видее |
Попробовал реализовать то, что предложил underW. Но, к сожалению, таблицы не меняют свои размеры вместе с панелью, только если установить у панели layout : 'border', а у таблицы region : 'center', но опять же изменять размеры будет только одна таблица.
|
покажи пример реализации.
и потом, ты знаешь что 'border' - это не единственный тип layout'a, например, можно поставить 'fit'. |
Вот задается 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} ] }); |
глянь на вот это, может это подойдет:
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. |
Спасибо за помощь
Все решилось намного проще: у всех таблиц я установил anchor : '100%' и теперь они меняют свои размеры относительно контейнера, т.е. относительно панели, так что спасибо за идею с панелью |
|
Часовой пояс GMT +3, время: 12:06. |