У меня есть форма, и мне нужно заполнить сетку со значениями полей.
В этот момент значения комбинированного списка получают с помощью SQL-запроса в файле PHP, который вызывается JSON Store для заполнения формы.
Таким же образом я использую, чтобы заполнить данные сетки, но с другим хранилищем только для сетки.
На самом деле я заполняю сетку методом JSON.
Это мой JSON Store, который вызывает некоторые значения, заполненные сеткой.
var store_grid_CC = new Ext.data.JsonStore({
//successProperty: 'success',
url: 'json/distribucion.php?opcion=grid',
autoLoad: true,
fields : ['center_name', 'subcenter_id','subcenter_name', 'porc_distribucion'],
root : 'grid',
});
и в слушателе combobox я использую этот вызов для загрузки сетки (потому что сетка должна быть заполнена, когда я выбираю значение в комбо)
store_grid_CC.load({
params:{ subcenter_id: subcenter_id,
opcion:'grid'}
});
В этом хранилище перейдите по адресу distribcion.php и отправьте subcenter_id, полученный из выпадающего списка, а затем PHP-файл вернет SQL-запросом имя_центра и имя_символа, которые заполнены в первых 2 столбцах таблицы (их 4).
Но последние 2 столбца должны быть заполнены некоторыми данными, полученными из текстовых полей в форме.
Тогда моя проблема заключается в том, что у меня есть 2 способа, чтобы получить данные для этой сетки (путем JSON и способом формы значения).
Одним из решений, которое я считаю, является получение всех данных из полей формы, включая значения в выпадающем списке, но не вызов SQL и ожидание ответа JSON, в противном случае получение RawValue из поля de combo (окончательное значение без использования subcenter_id).
Пример: значение поля со списком вызывается с помощью:
form.getForm().findField('combobox').RawValue() that return a name.
и текстовое поле с:
form.getForm().findField('textfield').getValue() that return a number.
GRID:
column1 column2 column3 column4
row1 comboRawValue comboRawValue texfieldgetValue texfieldgetValue
row2 «машина» «грузовик» 20 100
(это только пример).
Мне нужно поместить эти данные в хранилище сетки, и когда я нажимаю кнопку типа (Добавить строку), эти значения должны быть вставлены в сетку в новой строке.
Как я могу это сделать? Иначе, как я могу заполнить Grid Store данными, полученными из формы?
я пытаюсь с SimpleStores, JSONStores, но я не знаю, как дать значения формы для хранения, которые будут прочитаны сеткой после. Я не был успешным.
Большое спасибо!
Шаг 1: Вы хотите использовать те же имена для полей формы, которые вы используете для столбцов сетки и полей хранения.
Например. Поля формы:
items: [{
xtype: 'textfield',
fieldLabel: 'Test string',
name: 'Test1'
},{
xtype: 'checkbox',
fieldLabel: 'Test bool',
name: 'Test2'
},{
xtype: 'numberfield',
fieldLabel: 'Test number',
name: 'Test3'
}]
Например. модельные поля:
Ext.define('MyModel',{
extend: 'Ext.data.Model',
fields:[{
name: 'Test1',
type: 'string'
},{
name: 'Test2',
type: 'bool'
},{
name: 'Test3',
type: 'int'
}]
});
Например. Сетка столбцов:
columns:[{
xtype: 'gridcolumn',
text: 'Test string',
dataIndex: 'Test1'
},{
xtype:'checkcolumn',
text: 'Test bool',
dataIndex: 'Test2'
},{
xtype: 'numbercolumn',
text: 'Test number',
dataIndex: 'Test3'
}]
Шаг 2: Привязать запись к форме.
При создании новой записи создайте новый экземпляр модели и привяжите его к форме:
form.setRecord(Ext.create('MyModel'))
При сохранении обновите запись и добавьте ее в хранилище, если это еще не сделано.
form.updateRecord();
if(store.indexOf(form.getRecord()==-1) store.add(form.getRecord());
При редактировании существующей записи свяжите запись с хранилищем, например, пятую запись:
form.setRecord(store.getAt(4));
Других решений пока нет …