Добрый День!
Я понимаю, что вопрос с бородой, но прогуглив 2-а дня, так и не смог сохранить изменённую строчку
Ext.grid.GridPanel в БД. Поэтому пишу сюда ...
Имею Модель, Хранилище и Грид (код ниже).
Данные с сервера приходят и отображаются в гриде, а вот сохранить на Сервере в БД никак не получается.
При нажатии в гриде на
UPDATE - на Сервер в виде параметров приходит только какой-то
_dc и всё.
А, что бы записать данные в БД, на серваке мне надо получить:
1)
id-записи
2)
Names - изменённых полей и их новые
Values, что бы занести их в БД.
То есть что бы сформировать Скул-запрос:
UPDATE MyTable SET Names=@Values WHERE id=@id
Профи подскажите что надо убрать/добавить/переделать в моём коде:
//Модель:
Ext.require(['Ext.data.*', 'Ext.grid.*']);
Ext.define('MyDoc', {
extend: 'Ext.data.Model',
fields: [{
name: 'MyDocID',
type: 'int',
useNull: true
}, 'upID', 'ID_Red', 'MyDocTemaA'],
validations: [{
type: 'length',
field: 'upID',
min: 1
}, {
type: 'length',
field: 'ID_Red',
min: 1
}, {
type: 'length',
field: 'MyDocTemaA',
min: 1
}]
});
//Хранилище
var storeMyDocs = Ext.create('Ext.data.JsonStore', { //JsonStore - определение хранилища для удаленного источника данных
idProperty: 'MyDocID',
loadMask: true,
autoLoad: true,
autoSync: true, // указание на автосохранения в хранилище, при каждом изменении одно записи
pageSize: 12, // - количество считываемх за раз записей
//fields: [{ name: "MyDocID" }, { name: "upID" }, { name: "ID_Red" }, { name: "MyDocTemaA"}],
model: 'MyDoc',
proxy: {
type: 'rest', //ajax - тип прокси "Ajax"
url: "MyDocs.ashx?upID=" + UserID,
reader: {
type: "json",
root: "mydoc"
},
writer: {
restful: true,
type: "json",
root: "mydoc"
},
timeout: 120000 //2 minutes
},
listeners: {
load: function (store, records, successful) {
if (this.getCount() == 0) {
this.sync();
}
},
write: function (store, operation) {
var record = operation.getRecords()[0],
name = Ext.String.capitalize(operation.action),
verb;
if (name == 'Destroy') {
record = operation.records[0];
verb = 'Destroyed';
} else {
verb = name + 'd';
}
Ext.example.msg(name, Ext.String.format("{0} user: {1}", verb, record.getId()));
}
}
});
//Ну и сам Грид:
var gridMyDocs = new Ext.grid.GridPanel({
//id: 'gridMyDocs',
region: "center",
autoScroll: true,
loadMask: true,
store: storeMyDocs,
columns: [
{ text: "№", dataIndex: "MyDocID", width: 100, hidden: true },
{ text: "Пользователь", dataIndex: "upID", width: 100, hidden: true },
{ text: "id_red", dataIndex: "ID_Red", width: 100, hidden: true },
{ text: "Наименование", dataIndex: "MyDocTemaA", sortable: true, resizable: true, flex: 1, editor: { xtype: 'textfield'} },
],
plugins: [
Ext.create('Ext.grid.plugin.RowEditing', {
clicksToEdit: 1
})
],
bbar: new Ext.PagingToolbar({
store: storeMyDocs, // указано хранилище
displayInfo: true, // вывести инфо обо общем числе записей
displayMsg: 'Showing {0} - {1} of {2}' // формат инфо
}),
listeners: { //Дабл Клик
itemdblclick: function (dv, record, item, index, e) {
FunPanelShow("-1", "Мои документы: " + record.get('MyDocTemaA'), record.get('ID_Red'), "0");
}
}
});
П.С. Над кодом, за 2-а дня, много экспериментировал, да и там есть лишнее, поэтому не судите строго ...