【问题标题】:How do I add an export feature to Grid.Mvc so that I can export the current search results to excel?如何向 Grid.Mvc 添加导出功能,以便可以将当前搜索结果导出到 excel?
【发布时间】:2016-02-18 12:42:33
【问题描述】:

关于这个话题https://stackoverflow.com/questions/23498689/handle-a-pre-filtered-list-with-grid-mvcgrid.mvc use filtered Result in Controller 的问题很少,但没有答案。

我正在使用带有 MVC 4 的 Grid.MVC 的基本示例

@using GridMvc.Html

@Html.Grid(Model,"_MyCustomGrid").Columns(columns =>
          {
                columns.Add(foo => foo.Title).Titled("Custom column title").SetWidth(110);
                columns.Add(foo => foo.Description).Sortable(true);
          }).WithPaging(20)

这会创建一个看起来像这样的网格 -

一旦用户过滤了网格中的数据,我希望他们能够将其导出到 Excel。我已阅读源代码,但看不到可以插入的事件。

【问题讨论】:

    标签: c# asp.net-mvc excel asp.net-mvc-4 datagrid


    【解决方案1】:

    我找到的解决方案是创建一个控制器和视图,以返回具有 XLS 内容类型的表。不幸的是,当您在 Excel 中打开结果时会收到一条警告消息,因此它并不完美,但可以正常工作。

    例如

    // Controllers/TaskController.cs
    public virtual ActionResult Export () {
        var tasks = repository.GetAllTasks();
    
        Response.AddHeader("Content-Disposition", "attachment; filename=Tasks.xls");
        Response.ContentType = "application/ms-excel";
    
        return PartialView("Export", tasks);
    }
    
    // /Views/Task/Export.cshtml
    @model IEnumerable<OpuzEleven.Models.Task>
    @using GridMvc.Html;
    
    
    @(Html.Grid(Model, "_GridExcel")
        .Named("TaskGrid")
        .AutoGenerateColumns()
        .Columns(columns => columns.Add(c => c.UserProfile.FullName).Titled("Created by"))
        .Sortable(true)
        .Filterable(true))
    
    // /Shared/_GridExcel.cshtml
    @using GridMvc.Columns
    @model GridMvc.IGrid
    
    @if (Model == null) { return; }
    @if (Model.RenderOptions.RenderRowsOnly) {
      @RenderGridBody();
    } else {
      <div class="grid-mvc" data-lang="@Model.Language" data-gridname="@Model.RenderOptions.GridName" data-selectable="@Model.RenderOptions.Selectable.ToString().ToLower()" data-multiplefilters="@Model.RenderOptions.AllowMultipleFilters.ToString().ToLower()">
        <div class="grid-wrap">
          <table class="table table-striped grid-table">
            @* Draw grid header *@
            <thead>
              @RenderGridHeader()
            </thead>
            <tbody>
              @RenderGridBody()
            </tbody>
          </table>
        </div>
      </div>
    }
    
    @helper RenderGridBody () {
      if (!Model.ItemsToDisplay.Any()) {
        <tr class="grid-empty-text">
          <td colspan="@Model.Columns.Count()">
            @Model.EmptyGridText
          </td>
        </tr>
      } else {
        foreach (object item in Model.ItemsToDisplay) {
          <tr class="grid-row @Model.GetRowCssClasses(item)">
            @foreach (GridMvc.Columns.IGridColumn column in Model.Columns) {
              @column.CellRenderer.Render(column, column.GetCell(item))
            }
          </tr>
        }
      }
    }
    
    @helper RenderGridHeader () {
      <tr>
        @foreach (GridMvc.Columns.IGridColumn column in Model.Columns) {
          <th>@column.Title</th>
        }
      </tr>
    }
    

    注意:为了让链接传递用于过滤网格的参数,请使用 MVC ActionLink add all (optional) parameters from current url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多