![](/img/trans.png)
[英]How can I export search results to CSV in ASP.NET MVC application?
[英]How do I add an export feature to Grid.Mvc so that I can export the current search results to excel?
关于此主题的问题很少, https: //stackoverflow.com/questions/23498689/handle-a-pre-filtered-list-with-grid-mvc和grid.mvc在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。 我已经阅读了源代码,但是看不到可以插入的事件。
我发现的解决方案是创建一个控制器并查看返回具有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从当前网址添加所有(可选)参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.