Как получить значение select в jqGrid при использовании <select>editoptions для столбца - PullRequest
8 голосов
/ 06 апреля 2010

У меня есть несколько столбцов в jqGrid с edittype = "select".Как я могу прочитать значение опции значения, выбранного в данный момент в определенной строке?

Например: когда я предоставляю следующую опцию, как мне получить "FE" для FedEx и т. Д.

editoption: { value: “FE:FedEx; IN:InTime; TN:TNT” } 

getRowData () для rowId / cellname возвращает только текст / отображаемый компонент выбора.

Если я установил событие «изменение» данных в столбце, базовые события изменения событий будут происходить только при щелчках мыши, а не выбор клавиатуры (есть многочисленные ссылки на общие варианты выбора и проблемы с мышью / клавиатурой).

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

Ответы [ 4 ]

6 голосов
/ 05 апреля 2011

Вам необходимо установить форматер столбца на 'select'

Пример из вики:

colModel: [{name: 'myname', тип редактирования: «выбор», форматирование: «выбор», editoptions: {значение: "1: один; 2: два"}} ... ]

Подробнее здесь jqgridwiki

У меня была та же проблема, и это сработало как заклинание

1 голос
/ 26 октября 2010

Я только что решил этот вопрос, используя параметр JqGrid unformat и использую следующую функцию для неформатирования значения ячейки.

function Unformat_Select(cellvalue, options, cellobject)
{
    var unformatValue = '';

    $.each(options.colModel.editoptions.value, function (k, value)
    {
        if (cellvalue == value)
        {
            unformatValue = k;
        }
    });

    return unformatValue;
}

Вышеуказанный метод будет вызываться каждый раз, когда сетке нужны данные ячейки, например, когда вы вызываете метод "getRowData". Тем не менее, моя функция поддерживает только функцию редактирования парных значений. Вам необходимо изменить данные, как показано ниже:

editoption: 
{
    value:
    {
        FE:'FedEx', 
        IN:'InTime', 
        TN:'TNT'
    }
}

Дополнительную информацию о параметре unformat вы можете найти по следующей ссылке.

JqGrid Wiki - Пользовательский форматировщик

PS. Можно изменить мою функцию для поддержки значения раскрывающегося списка на стороне клиента. Но я думаю, что невозможно применить эту функцию для значения выпадающего списка на стороне сервера.

Обновление

В последней версии jqGrid 3.8.1 я только что обнаружил некоторую ошибку, когда пользователь отменял редактирование строки (или программно вызывал метод restoreRow), jqGrid будет создавать метку, используя ключ данных (вместо значения данных). Я создаю следующую функцию, чтобы исправить эту проблему. Для использования этого необходимо указать пользовательскую функцию форматирования этого столбца . Эта функция отображает значение ячейки в значение списка, сравнивая ключ или значение.

function JqGridInlineEditor_SelectFormatter(cellvalue, options, rowObject)
{
    var temp = '';
    $.each(options.colModel.editoptions.value, function (key, value)
    {
        if (cellvalue == key || cellvalue == value)
        {
            temp = value;
            return false;
        }
    });

    return temp;
}

Таким образом, вы можете отправить ключ или значение в виде данных столбца для визуализации с помощью указанного выше пользовательского средства форматирования.

0 голосов
/ 23 июня 2016

Если в случае, если у вас есть требование, где каждая строка имеет выпадающий список и имеет значения, такие как

FE: 'FedEx', В: «Интайм», TN: 'TNT'

Теперь вместо сохранения данных в бэкэнд при событии изменения выпадающего меню, вы хотите сохранить данные по нажатию кнопки «Сохранить» на уровне строки, но хотите сохранить выпадающее по выбранному значению (TN), а не отображать текст (TNT). Вы можете создать еще одно скрытое поле для установки кода выбранной страны при редактировании выпадающего меню. Здесь, когда пользователь выходит из встроенного редактирования ячейки, будет вызван метод afterSaveCell, и вы можете установить его, как указано в следующем коде:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>http://stackoverflow.com/q/9655426/315935</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />

    <link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/themes/redmond/jquery-ui.css" />
    <link rel="stylesheet" type="text/css" href="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-4.3.1/css/ui.jqgrid.css" />
    <style type="text/css">
        html, body { font-size: 75%; }
    </style>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.18/jquery-ui.min.js"></script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-4.3.1/js/i18n/grid.locale-en.js"></script>
    <script type="text/javascript">
        $.jgrid.no_legacy_api = true;
        $.jgrid.useJSON = true;
    </script>
    <script type="text/javascript" src="http://www.ok-soft-gmbh.com/jqGrid/jquery.jqGrid-4.3.1/js/jquery.jqGrid.src.js"></script>
    <script type="text/javascript">
    //<![CDATA[
        /*global $ */
        /*jslint devel: true, browser: true, plusplus: true, nomen: true, unparam: true */
        $(document).ready(function () {
            'use strict';
            var listOptions = "CN:Canada; US:United States; FR:France; IN:India";
                var mydata = [{
                    name: "Toronto",
                    country: "CN",
                    continent: "North America",
                    countrycode: "CN"
                }, {
                    name: "New York City",
                    country: "US",
                    continent: "North America",
                    countrycode: "US"
                }, {
                    name: "Silicon Valley",
                    country: "US",
                    continent: "North America",
                    countrycode: "US"
                }, {
                    name: "Paris",
                    country: "FR",
                    continent: "Europe",
                    countrycode: "FR"
                }, {
                    name: "Pune",
                    country: "IN",
                    continent: "Asia",
                    countrycode: "IN"
                }]

                $("#gvManageMapping").jqGrid({
                    data: mydata,
                    datatype: "local",
                    colNames: ["Name", "Country", "Continent", "countrycode"],
                    colModel: [{
                        name: 'name',
                        index: 'name',
                        editable: false,
                    },
                    {
                        name: 'country',
                        index: 'country',
                        editable: true, edittype: "select", formatter: 'select', editoptions: {
                            value: listOptions,
                        }, editrules: { required: true, integer: false }, formatter: "select"
                    },
                    {
                        name: 'continent',
                        index: 'continent',
                        editable: false,
                    },
                    {
                        name: 'countrycode',
                        index: 'countrycode',
                        editable: false
                    }],
                    afterSaveCell: function (rowid, cellname, value) {
                            var selectedCountryCode, $this;
                            if (cellname === 'country') {
                                $this = $(this);
                                selectedCountryCode = $this.jqGrid("getCell", rowid, 'country');
                                $this.jqGrid("setCell", rowid, 'countrycode', selectedCountryCode);
                            }
                        },
                    pager: '#pager',
                    'cellEdit': true,
                    'cellsubmit': 'clientArray',
                    editurl: 'clientArray'
                });
        });
    //]]>
    </script>
</head>
<body>
    <table id="gvManageMapping"><tr><td /></tr></table>
    <div id="pager"></div>
</body>
</html>
0 голосов
/ 06 апреля 2010

Документация для getRowData состояний:

Не используйте этот метод при редактировании строки или ячейки. Это вернет содержимое ячейки, а не действительное значение элемента ввода

Строка все еще редактируется, когда вы звоните getRowData()?

Обновление

Согласен, jqGrid не очень хорошо обрабатывает <select>. В моем приложении я фактически смог обойти это, не указав опцию редактирования (то есть ключ / значение были оба "FedEx"); перевод в ID тогда сделан на сервере. Это не правильный способ кодирования, но в то время он работал достаточно хорошо для моих нужд.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...