jqgrid/mvc 3 - Export zu excel und erstellen ein Datei-download-dialog?
Ich habe gelesen, dass viele Lösungen aber ich habe nicht die Arbeit eines noch.
Mein problem ist ganz einfach,, exportieren von Daten in excel-Datei und ziehen Sie eine Datei-download-dialog.
Jedoch ist die Datei download-dialog nicht angezeigt. Ich konnte die call-Methode von View zu Controller ist falsch, weil ich gedebuggt zu ExportToExcel Funktion und es gibt keine Fehler
Danke im Voraus
Diese Ansicht:
<script type="text/javascript">
$(document).ready(function () {
jQuery("#list").jqGrid({
url: '/documents/List',
datatype: 'json',
mtype: 'GET',
colNames: ['ID', 'File Name', 'Description', 'File', 'Modified', 'File Type', 'Access'],
colModel: [
{ name: 'ID', index: 'id', width: 40, align: 'left', key: true, editable: false, editrules: { edithidden: false }, edittype: 'text' },
{ name: 'FileName', index: 'filename', width: 315, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
{ name: 'Description', index: 'description', width: 210, align: 'left', editable: true, edittype: 'text', editrules: { required: true }, formoptions: { elmsuffix: ' *'} },
{ name: 'File', index: 'file', hidden: true, enctype: "multipart/form-data", method: "post", editable: true, edittype: 'file', editrules: { edithidden: true, required: true }, formoptions: { elmsuffix: ' *'} },
{ name: 'Modified', index: 'modified', width: 105, align: 'left', editable: false, edittype: 'text', editoptions: { size: 20, dataInit: function (el) { $(el).datepicker({ dateFormat: 'mm/dd/yy' }); } } },
{ name: 'FileType', index: 'filetype', width: 210, align: 'left', editable: true, edittype: 'select', editrules: { required: true }, formoptions: { elmsuffix: ' *' },
editoptions: { dataUrl: '/HtmlSelectHelper/ConstructDocumentTypeList' }
},
{ name: 'Access', index: 'access', width: 114, align: 'left', editable: true, edittype: 'select', editrules: { required: true }, formoptions: { elmsuffix: ' *' },
editoptions: { value: '0:Private;1:Public' }
},
],
autowidth: false,
forceFit: false,
shrinkToFit: false,
width: 1024,
height: 600,
rowNum: 10,
rowList: [5, 10, 20, 50, 100],
pager: jQuery('#pager'),
sortorder: "desc",
sortable: true,
viewrecords: true,
caption: "Documents List",
editurl: "/documents/edit"
});
jQuery("#list").jqGrid('navGrid', '#pager',
{
add: true, edit: true, view: true, del: true
},
{
closeAfterEdit: true,
closeAfterAdd: true,
width: 400
},
{
closeAfterEdit: true,
closeAfterAdd: true,
width: 400,
serializeEditData: function (data) { return $.param($.extend({}, data, { id: 0 })); }
},
{
},
{
multipleSearch: true
});
jQuery("#list").jqGrid('navButtonAdd', '#pager', { caption: "", buttonicon: "ui-icon-calculator", title: "choose columns",
onClickButton: function () {
jQuery("#list").jqGrid('columnChooser');
}
});
jQuery("#list").jqGrid('navButtonAdd', '#pager', {
caption: "", buttonicon: "ui-icon-print", title: "Excel Export",
onClickButton: function () {
$.post("/Documents/ExportToExcel", {}, function () {
});
}
});
jQuery("#list").jqGrid('filterToolbar', { stringResult: true, searchOnEnter: true, defaultSearch: "cn" });
});
</script>
Dies ist Controller:
public ActionResult ExportToExcel()
{
var documents = db.documents as IEnumerable<document>;
var grid = new GridView
{
DataSource = from document in documents
select new
{
filename = document.filename,
description = document.description,
modified = document.modified.ToString(),
filetype = document.filetype,
access = document.access
}
};
grid.DataBind();
Response.ClearContent();
Response.AddHeader("content-disposition", "inline; filename=Excel.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(sw.ToString());
Response.End();
return View("Index");
}
Ich habe wirklich am Ende meine Lösung mit " submit form, es ist der einzige Weg, um download-dialog angezeigt. Ich nicht herausfinden, eine andere Lösung, so weit
InformationsquelleAutor Dranix | 2011-09-28
Du musst angemeldet sein, um einen Kommentar abzugeben.
Bitte ändern Sie den code wie unten
Anstatt Anzeigen() return new EmptyResult();
auch Antwort.ContentType="application/vnd.ms-excel"
Wenn Ihr code nicht funktioniert, können Sie NPOI für die Excel-Datei manipulation
Bitte versuchen Sie den zweiten Vorschlag NPOI
wenn Sie Benutzer verwenden excel 2007 check-out ClosedXML closedxml.codeplex.com
InformationsquelleAutor Prasanth
Ich hatte das gleiche problem und es geschafft, zu lösen, indem Sie die Ansicht ändern wie folgt:
InformationsquelleAutor Renato Vianna
Nicht Rendern der Ansicht auf alle.
Anstatt
View()
zurückFile()
vorbeibyte[]
mit dem Datei-Inhalt.Mehr info hier: http://msdn.microsoft.com/en-us/library/dd460208.aspx
InformationsquelleAutor Jakub Konecki
ich denke, der beste Weg ist die Verwendung der FileResult
InformationsquelleAutor Stefan Michev