JQGrid Динамический столбец и поисковый запрос - PullRequest
2 голосов
/ 15 марта 2012

Предположим, у меня есть следующие данные:

Name        Month           Expense
----------  --------------  ----------
XYZ         February         10
XYZ         March            50
KLM         March            20
ABC         April            30

Следуя решению в этом SO вопросе Мне удалось создать экземпляр JQGrid, в котором значение "Расход" представлено в столбцах, а не в строках. Например:

Name        Expense February     Expense March     Expense April
---------   -----------------    ---------------   --------------
XYZ         30,00                50,00             0,00
KLM         0,00                 20,00             0,00
ABC         0,00                 0,00              30,00

В colModel, который я динамически создаю, я использую одно и то же значение index для каждого динамически добавляемый столбец, поэтому каждый поиск будет автоматически перенаправлен в поле Expense.

Это работает как шарм:)

К сожалению, в диалоговом окне поиска пользователи не видят ни одного столбца для фильтрации в поле «Расходы», но у него есть возможность фильтровать столбцы с именами соответственно Expense February, Expense March и Expense April, что немного сбивает с толку, потому что он думает, что собирается фильтровать не только для свойства Expense, но и для свойства Month.

Есть ли способ указать плагину jqGrid скрыть эти нежелательные метки и использовать только общее поле с именем Expense?

Большое спасибо за помощь!

EDIT:

Это сгенерированный объект, возвращающийся после первого вызова (он содержит colNames и colModel)

{
   "ColNames":[
      "Name", "Expense February", "Expense March", "Expense April"
   ],
   "ColModel":[
      { "name":"Name", "index":"Name", ... },
      { "name":"Expense1", "index":"Expense", ... },
      { "name":"Expense2", "index":"Expense", ... }, 
      { "name":"Expense3", "index":"Expense", ... }
   ]
}

Также это код, который создает сетку

$.ajax({
    url: 'http://server/GetColumns',
    type: "post",
    dataType: "json",
    data: JSON.stringify({ }),
    contentType: "application/json; charset=utf-8",
    async: false,
    success: function (result) {
        if (result) {
            var colM = result.ColModel;
            var colN = result.ColNames;

            grid.jqGrid('GridUnload');

            grid.jqGrid({
                url: 'http://server/GetData',
                datatype: 'json',
                mtype: 'post',
                colModel: colM,
                colNames: colN,

                [other params here]
            })
        }
    },
    error: function (xhr, ajaxOptions, thrownError) {
       [...]
    },
    complete: function () {
       [...]
    }
});

1 Ответ

1 голос
/ 15 марта 2012

Похоже, что вы можете просто включить search: false во все ExpenseX столбцы, за исключением столбца Expense1.В случае, если диалог поиска будет содержать только один столбец «Расходы» для поиска.

ОБНОВЛЕНО : Если вы используете диалог расширенного поиска, вы можете изменить «Февраль расходов» на «Расход» с помощьюуважение к обратному вызову afterRedraw :

afterRedraw: function () {
    $(this).find("table.group td.columns option[value=Expense1]").text("Expense");
}

В демоверсии Я заменяю стандартное имя "Client", которое приходит от colNames на текст "!!! Имя моего клиента !!! ":

enter image description here

Код afterRedraw в демоверсии длиннее только потому, что я использовал демоверсию из ответ как шаблон.Это позволяет дополнительно использовать Enter , чтобы начать поиск.

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