Показать сообщение отдельно
  #1 (permalink)  
Старый 09.05.2012, 16:21
Профессор
Отправить личное сообщение для potkin Посмотреть профиль Найти все сообщения от potkin
 
Регистрация: 23.08.2008
Сообщений: 162

GridPanel и сохранение изменённых/добавленных данных в БД ???
Добрый День!
Я понимаю, что вопрос с бородой, но прогуглив 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-а дня, много экспериментировал, да и там есть лишнее, поэтому не судите строго ...

Последний раз редактировалось potkin, 09.05.2012 в 17:23.
Ответить с цитированием