【发布时间】:2012-03-09 04:16:19
【问题描述】:
我正在使用 jqgrid(标准)和 EF 4 + MVC3。我想实现 excel 导出,如果可能的话,使用用于填充网格的相同动作控制器。 例如,我想知道是否有可能/合乎逻辑地传递一个附加参数。你会建议我哪种方法? 我问这个问题是因为我还在接近实现 excel 导出,如果可能的话,我想优化/重用代码。
要生成 excel,我想使用 Stephen Walther 博士的 this library,它具有三种类型的输出并允许定义标题。如果您认为它对我的目的有效,请告诉我。
关于jqgrid的代码,我找到了Oleg的this interesting answer,但是不明白能不能应用到我的需要。
不幸的是,到目前为止,我只找到了使用 EF MVC 导出 excel 的部分解决方案,但没有解决方案或完整的示例...
这是包含我的 jqgrid 的 _Index 部分视图
<table id="mygrid"></table>
<div id="pager2"></div>
jQuery("#mygrid").jqGrid({
url:'controller/jqIndex',
datatype: "json",
colNames:['id','field1', ...],
colModel:[
{name:'id',index:'id', width:55},
{name:'field1',index:'field1', width:90},
...
],
rowNum:10,
rowList:[10,20,30],
pager: '#pager2',
sortname: 'id',
viewrecords: true,
sortorder: "desc",
caption:"modal jquery + jqgrid test"});
jQuery("#list2").jqGrid('navGrid','#pager2',{edit:false,add:false,del:false});
//TODO
???
...some code to call the controller action with the `excel` parameter set `true`
控制器(基于OLEG'S IMPLEMENTATION)
public ActionResult jqIndex(string sidx, string sord, int page, int rows, bool _search, string filters, bool excel) // note the excel parameter <<
{
var context = new TManagerContext();
var objectContext = context.ObjectContext();
var set = objectContext.CreateObjectSet<Ticket>();
var serializer = new JavaScriptSerializer();
Filters f = (!_search || string.IsNullOrEmpty(filters)) ? null : serializer.Deserialize<Filters>(filters);
ObjectQuery<Ticket> filteredQuery = (f == null ? (set) : f.FilterObjectSet(set));
filteredQuery.MergeOption = MergeOption.NoTracking; // we don't want to update the data
int totalRecords = filteredQuery.Count();
var pagedQuery = filteredQuery.Skip("it." + sidx + " " + sord, "@skip",
new ObjectParameter("skip", (page - 1) * rows))
.Top("@limit", new ObjectParameter("limit", rows));
int pageIndex = Convert.ToInt32(page) - 1;
int pageSize = rows;
int totalPages = (int)Math.Ceiling((float)totalRecords / (float)pageSize);
var queryDetails = (from e in pagedQuery
select new
{
e.TicketID,
e.field1,
...
}).ToList();
var result = new
{
total = totalPages,
page = page,
records = totalRecords,
rows = (from e in queryDetails
select new
{
id = e.TicketID,
cell = new string[]
{
e.field1,
...
}
}).ToArray()
};
if (excel) {
ExportExcel(result); // if possible, pass filter parameters too, column order, etc...
}
return Json(result, JsonRequestBehavior.AllowGet);
}
如果这个问题可能很愚蠢,请见谅,我只是一个(爱好者)初学者。
感谢您的宝贵帮助! 最好的问候
【问题讨论】:
标签: asp.net-mvc asp.net-mvc-3 excel jqgrid export