как получить доступ к выпадающему списку в jqgrid и получить значение

привет всем, у меня есть jqgrid и встроенное обновление. я написал этот код

 $(function () {

         var  localstr="2:Dolar;3:Pond;4:Rial";

 var rows;
            var lastSel;
            var grid = $('#list');



            grid.jqGrid({
                url: 'jQGridHandler.ashx',

                postData: { ActionPage: 'ClearanceCost', Action: 'Fill' },
                ajaxGridOptions: { cache: false },
                loadonce: true,
                direction: "rtl",

                datatype: 'json',
                height: 490,
                colNames: ['RequestId', 'WaybillNo', 'CostId', 'NameCost', 'Amount', 'CurrencyTypeId ', 'Remark'],
                colModel: [
                        { name: 'REQUEST_ID', width: 100, sortable: true, hidden: true },
                        { name: 'WAYBILL_NO', width: 100, sortable: true, hidden: true },
                        { name: 'COST_ID', width: 200, sortable: true, hidden: true },
                        { name: 'COST_NAME', width: 200, sortable: true },
                        { name: 'COST_AMOUNT', width: 100, sortable: true, editable: true },
                        { name: 'CURRENCY_ID', width: 100, sortable: true, editable: true, edittype: 'select', formatter: 'select', editoptions: {
                            value: localstr
                            //,



                        },
                        { name: 'REMARK', width: 200, sortable: true, editable: true }
                       ],

                gridview: true,
                rowNum: 30,
                rowList: [30, 60, 90],
                pager: '#pager',
                sortname: 'REQUEST_ID',
                viewrecords: true,
                sortorder: 'ASC',

                rownumbers: true,
                loadComplete: function () {

                    var $this = $(this);
                    rows = this.rows;
                    var l = rows.length, i, row;

                    for (i = 0; i < l; i++) {
                        row = rows[i];



                        var selRowId = grid.jqGrid('getGridParam', row.id);
                        console.log(selRowId);
                        console.log(grid.jqGrid('getCell', row.id, 'CURRENCY_ID'));

                        if ($.inArray('jqgrow', row.className.split(' ')) >= 0) {
                            $this.jqGrid('editRow', row.id, true);
                        }

                    }
                },
                editurl: "jQGridHandler.ashx"

            });
            grid.jqGrid('navGrid', '#pager', { add: true, edit: true, del: true }, {}, {}, {}, { multipleSearch: true, overlay: false, width: 460 });


            $("#btnsave").click(function () {
                var l = rows.length, i, row;

                for (i = 1; i < l; i++) {
                    row = rows[i];

//                    var $this = grid.jqGrid('getCell', row.id, 'COST_AMOUNT');
//                    var $id = $($this).attr("id");
//                    var COST_AMOUNT = $("#" + $id).val();


//                    console.log(grid.jqGrid('getCell', row.id, 'COST_ID'));
//                    $this = grid.jqGrid('getCell', row.id, 'COST_ID');
//                    $id = $($this).attr("id");
//                    var COST_ID = $("#" + $id).val();

                   alert(grid.jqGrid('getCell', row.id, 'CURRENCY_ID'));
//                    $this = grid.jqGrid('getCell', row.id, 'CURRENCY_ID');
//                    $id = $($this).attr("id");
//                    var CURRENCY_ID = $("#" + $id).val();

//                    $this = grid.jqGrid('getCell', row.id, 'REMARK');
//                    $id = $($this).attr("id");
//                    var REMARK = $("#" + $id).val();

//                    console.log(COST_ID + ",  " + COST_AMOUNT + ",  " + CURRENCY_ID + ",  " + REMARK);



                }

            });

        });

я хочу получить значение выпадающего списка CURRENCY_ID, когда пользователь нажимает кнопку btn, пожалуйста, помогите мне. Спасибо всем

РЕДАКТИРОВАТЬ01:

введите здесь описание изображения

Г-н Олег, я хочу, чтобы дизайн был похож на это опубликовано

спасибо за помощь


person Pouya    schedule 27.06.2012    source источник
comment
Где вы определили переменную localstr? Вы используете операцию += с localstr. Каково начальное значение localstr? undefined? Вы вызываете editRow для каждой строки сетки в loadComplete. Почему вы делаете это? Это делает заполнение сетки очень медленным. Обычно один вызов editRow внутри onSelectRow. Это ускоряет и упрощает все. Кроме того, вы используете navGrid с edit: true, что позволяет вам редактировать форму в дополнение к редактированию в реальном времени. Какой режим редактирования вы хотите использовать?   -  person Oleg    schedule 27.06.2012
comment
@ oleg: значение localstr равно 2:Dolar;3:Pond;4:Rial. я хочу, чтобы при загрузке формы, если редактируемый столбец был прав, изменить его на редактируемый. я не понимаю этого. Кроме того, вы используете navGrid с edit: true, что позволяет вам редактировать форму в дополнение к встроенному редактированию. Какой режим редактирования вы хотите использовать? -   -  person Pouya    schedule 27.06.2012
comment
Важно знать данные, которые вы заполняете в столбце 'CURRENCY_ID'. Это должны быть такие значения, как 2, 3 или 4, а не тексты Dolar, Pond или Rial. Нет лучшего режима редактирования. Иногда я использую редактирование формы, иногда встроенное редактирование, но использование обоих режимов, как вы, создает больше проблем. Вы писали: я хочу, чтобы при загрузке формы, если столбец редактируется, изменить на редактируемый. Возможно, вы имеете в виду, что хотите начать редактирование всех строк, но я не понимаю причины этого. Я бы начал редактирование одной строки, если пользователь выберет строку, а затем сохранит изменения строки.   -  person Oleg    schedule 27.06.2012
comment
@oleg: у меня есть форма для ввода данных. я загружаю все COST_NAME и хочу, чтобы пользователь ввел AmontCost и CurrencyType после этого нажмите кнопку «Сохранить», чтобы я изменил всю строку на редактируемую в начале, пожалуйста, если это решение неверно, пожалуйста, дайте мне решение, спасибо мистер олег за помощь мне.   -  person Pouya    schedule 27.06.2012
comment
Я полагаю, вы имеете в виду, что у вас есть форма для ввода данных в дополнение к коду, который вы разместили. Поскольку я не знаю точно ваших требований, мне сложно вам что-то порекомендовать. Тем не менее вызов editRow для выбранной строки только в обратном вызове onSelectRow кажется мне все же лучше, чем вызов editRow в цикле для всех строк. Что касается вашего основного вопроса без выпадающего списка для CURRENCY_ID, я думаю, что причиной ошибки может быть заполнение jqGrid данными. Вы должны добавить свой вопрос к ответу JSON от сервера.   -  person Oleg    schedule 27.06.2012
comment
@ Олег: я редактирую пост, спасибо за помощь.   -  person Pouya    schedule 27.06.2012
comment
Не могли бы вы опубликовать те же данные JSON в виде текста?   -  person Oleg    schedule 27.06.2012


Ответы (1)


Видно, что вы используете неправильный порядок столбцов в данных JSON. Текст типа "ЕВРО" находится в третьем столбце, но у вас есть столбец в сетке на 6-м месте. Также нужно посчитать все скрытые столбцы. Возможно, вам нужно просто изменить порядок столбцов и переместить «НОМЕР_НАКЛАДКИ» и «ИДЕНТИФИКАТОР СТОИМОСТИ» в другое место в colModel.

Вероятно, это была ошибка, которая у вас есть?

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

var $this = $(this);
rows = this.rows;

должно быть зафиксировано на

var $this = $(this),
    rows = this.rows;

что то же самое, что

var $this = $(this), rows = this.rows;

Текущий код

var $this = $(this);
window.rows = this.rows;

или выдать ошибку в строгом режиме JavaScript.

person Oleg    schedule 27.06.2012
comment
@mohsen: не могли бы вы опубликовать текст вместо картинок? Более того, я до сих пор не нахожу значений для 'CURRENCY_ID' в JSON, а количество столбцов в JSON (8) по-прежнему не соответствует количеству столбцов в colModel (7). Значения в JSON для 'CURRENCY_ID' должны быть 2, 3 или 4, чтобы соответствовать editoptions.value ("2:Dolar;3:Pond;4:Rial"), которые вы используете в коде. - person Oleg; 27.06.2012