jqgrid, экспорт в excel (с текущими данными постов фильтра) на сайте asp.net-mvc - PullRequest
0 голосов
/ 15 мая 2011

У меня есть веб-страница asp.net-mvc, и я использую jqgrid на внешнем интерфейсе. я хочу иметь кнопку экспорта в Excel, которая будет экспортировать текущий набор данных (на основе текущего фильтра).

Я уже использую фильтр панели инструментов, поэтому я вижу, что настройки фильтра хранятся в данных постов, но я не могу понять, как создать метод, который будет передавать все настройки / правила фильтра на сервер из jqgrid.

Я вижу несколько примеров jqgrid "export to excel" после поиска в Google, но аналогичен этому примеру , но ни один из них не передает информацию о фильтре на сервер.

Ответы [ 3 ]

3 голосов
/ 15 мая 2011

Вы можете поместить скрытые поля в форму экспорта в Excel:

@using (Html.BeginForm(new { action = "ExportToExcel" }))
{
    @Html.Hidden("sidx")
    @Html.Hidden("sord")
    @Html.Hidden("page")
    @Html.Hidden("rows")
    <table id="list"></table>
    <input type="submit" value="Export to Excel" />
}

и заполните их при отправке формы на основе текущих значений:

$('form').submit(function () {
    var grid = $('#list');
    var sortname = grid.getGridParam('sortname');
    var sortorder = grid.getGridParam('sortorder');
    var page = grid.getGridParam('page');
    var rows = grid.getGridParam('rowNum');
    $('#sidx').val(sortname);
    $('#sord').val(sortorder);
    $('#page').val(page);
    $('#rows').val(rows);
});

Таким образом, действие контроллера ExportToExcel примет эти параметры и сможет фильтровать список.

1 голос
/ 16 июня 2011

Что я сделал, так это помещал гридстейт в кеш каждый раз, когда запрашиваются данные, затем я делаю экспорт в Excel, используя gridState. Где-то на сайте jqGrid есть примеры этого:

//this fragment in GetData method
Session["ExceptionGridState"] = gridModel.ExceptionGrid.GetState(true);

Тогда когда экспорт называется:

public ActionResult ExportToExcel_CurrentData()
{
  var gridModel = new ExceptionJqGridModel();
  var grid = gridModel.ExceptionGrid;

  // call the ExportToExcel built-in method
  JQGridState gridState = Session["ExceptionGridState"] as JQGridState;
  gridState.CurrentPageOnly = false;
  grid.ExportToExcel(SourceQuery(),
        String.Format("SomeDatasetName_Filtered_{0:yyyymmddhhmm}.xls", 
            DateTime.Now), 
        gridState);

return View();

}

Это работает для меня.

0 голосов
/ 20 февраля 2012

Мне удалось сделать отфильтрованный экспорт, вдохновленный вышеуказанным решением @simpatric greg.

Я устанавливаю одну переменную сеанса для каждого параметра сетки, когда запрашиваются данные, а затем снова передаю их в службу экспорта Excel.Решение Грега может работать с asp.net MVC, и это нормально для основного вопроса.Следующее решение можно использовать и со стандартным чистым js jqgrid:

ДЕЙСТВИЕ СЕТКИ КОНТРОЛЛЕРА

        ...
      Session["jqsidx"] = sidx; 
      Session["jqsord"] = sord; 
      Session["jqpage"] = page; 
      Session["jqrows"] = rows; 
      Session["jq_search"] = _search; 
      Session["jqfilters"] = filters; 
      ....

ОТПРАВЛЕНО ВНУТРИ ДЕЙСТВИЯ EXCEL EXPORT ^^

 string sidx = Session["jqsidx"] as String;
 string sord = Session["jqsord"] as String;
 int? page = Session["jqpage"] as Nullable<Int32>;
 int? rows = Session["jqrows"] as Nullable<Int32>;
 bool? _search = Session["jq_search"] as Nullable<bool>;
 string filters = Session["jqfilters"] as String;

var query = myqueryservice.getGridData(sidx, sord, (int)page, (int)rows, (bool)_search, filters, urlparams).ToList();
...

Я надеюсь, что это может помочь другим людям, имеющим такую ​​же проблему со стандартным jqgrid.

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