Экспортируйте jqgrid отфильтрованные данные как Excel или CSV

Я в беде, пожалуйста, помогите мне. Я хочу показать кнопку "Экспортировать в Excel" в пейджере jqgrid, которая будет экспортировать текущий набор данных, которые извлекаются после поиска по критериям jqgrid (на основе текущего фильтра). Я использую параметр "loadonce:true" для своего jqgrid. Теперь я хочу экспортировать данные из локального источника данных jqgrid после поиска. Если это невозможно, то как я могу передавать параметры серверу, когда нажимаю на кнопку экспорта навигации, для которой необходимо выполнить критерии поиска. Я использую back-end как сервлет.

2 ответа

Решение

Я бы порекомендовал вам осуществить экспорт данных на сервер и просто опубликовать текущий поисковый фильтр в серверной части. Полная информация о параметрах поиска определяет postData параметр jqGrid. Еще один логический параметр jqGrid search определить, следует ли применять поисковый фильтр. Вы должны лучше игнорировать _search собственностью postData параметр и использование search параметр jqGrid.

Формат информации о поисковом фильтре зависит от того, используется ли использование multipleSearch: true вариант. Я лично использую это всегда. В случае если полная информация о фильтре будет размещена в одном свойстве postData параметр: filters имущество. Формат описан здесь. Код, который получает информацию, выглядит следующим образом

var $grid = $("#list"),
    isFilterAreUsed = $grid.jqGrid('getGridParam', 'search'),
    filters = $grid.jqGrid('getGridParam', 'postData').filters;

Если вы не используете multipleSearch: true Если вы не сможете использовать сложные фильтры, информация о фильтре будет размещена в трех свойствах postData параметр: searchField, searchOper а также searchString,

Согласно ответу Олега можно использовать

код JavaScript:

$("#grid").jqGrid('navButtonAdd', '#grid_toppager', {
        caption: "Excel",
        buttonicon: "ui-icon-save",
        onClickButton: function () {
            document.forms['_export']._buffer.value = $("#grid").jqGrid('getGridParam', 'postData');
            document.forms['_export'].submit();
        }
    });

index.aspx:

<form  id='_export' method="post" action='<%= Url.Action( "Export", "Grid", new { _entity= Model.Name } ) %>'>
    <input type="hidden" name="_buffer" id="_buffer" value="" />
    </form>

контроллер:

public ActionResult Export(string _entity, string _sidx, string _sord, string filters ) {
            string where = "";
            if (!string.IsNullOrEmpty(filters))
            {
                var serializer = new JavaScriptSerializer();
                Filters filtersList = serializer.Deserialize<Filters>(filters);
                where = filtersList.FilterObjectSet(entity);
            }
            if (string.IsNullOrEmpty(where))
                where = " TRUE ";
            Response.ClearContent();
            Response.AddHeader("content-disposition", "attachment; filename=MyExcelFile.xls");
            Response.ContentType = "application/excel";
            Response.Write(GetAllData(_entity, _sidx, _sord, where));
            Response.End();
            return View("Index");
}

Параметр filters в контроллере имеет нулевое значение. Не знаю, какой способ передачи фильтров и параметров сортировки в метод экспорта.

Другие вопросы по тегам