asp.net mvc - Kendo grid export to pdf -
i'm relatively new mvc , kendo library. in project need way export data kendo grid( http://demos.kendoui.com/web/grid/index.html ) pdf.
i found pretty example on how in entity framework used pass data grid. here example: http://www.kendoui.com/code-library/mvc/grid/export-grid-to-pdf.aspx .
in project used nhibernate mapp data , later pass model in view.
unfortunately don't understand code in example , cant figure out how change code .
example:
controller:
using system; using system.collections.generic; using system.linq; using system.web; using system.web.mvc; using kendo.mvc.ui; using kendomvcwrappers.models; using kendo.mvc.extensions; using system.collections; using system.io; using system.text; using itextsharp.text; using itextsharp.text.pdf; namespace kendomvcwrappers.controllers { public class homecontroller : controller { private nwentities db = new nwentities(); public actionresult index() { viewbag.message = "modify template kick-start asp.net mvc application."; return view(); } public actionresult read([datasourcerequest] datasourcerequest request) { // datasourcerequest = request; return json(db.products.todatasourceresult(request)); } public fileresult export([datasourcerequest]datasourcerequest request) { ienumerable products = db.products.todatasourceresult(request).data; // step 1: creation of document-object var document = new document(pagesize.a4, 10, 10, 10, 10); //step 2: create memory stream listens document var output = new memorystream(); pdfwriter.getinstance(document, output); //step 3: open document document.open(); //step 4: add content document var numofcolumns = 4; var datatable = new pdfptable(numofcolumns); datatable.defaultcell.padding = 3; datatable.defaultcell.borderwidth = 2; datatable.defaultcell.horizontalalignment = element.align_center; // adding headers datatable.addcell("product id"); datatable.addcell("product name"); datatable.addcell("unit price"); datatable.addcell("quantity per unit"); datatable.headerrows = 1; datatable.defaultcell.borderwidth = 1; foreach (product prod in products) { datatable.addcell(prod.productid.tostring()); datatable.addcell(prod.productname); datatable.addcell(prod.unitprice.tostring()); datatable.addcell(prod.quantityperunit); } // add table document document.add(datatable); //this important don't forget close document document.close(); // send memory stream file return file(output.toarray(), "application/pdf", "products.pdf"); } } }
view:
@{ viewbag.title = "home page"; } @model ienumerable<kendomvcwrappers.models.product> @( html.kendo().grid(model).name("grid") .datasource(ds => ds.ajax() .model(m => { m.id(p=>p.productid); }) .read(r => r.action("read", "home")) ) .toolbar(toolbar => toolbar.custom() .text("export pdf") .htmlattributes(new { id = "export" }) .url(url.action("export", "home", new { page = 1, pagesize = "~", filter = "~", sort = "~" })) ) .columns(columns => { columns.bound(p => p.productid); columns.bound(p => p.productname); columns.bound(p => p.unitprice).format("{0:c}"); columns.bound(p => p.quantityperunit); }) .events(ev => ev.databound("ondatabound")) .pageable(paging => paging .input(false) .numeric(true) .info(true) .previousnext(true) .pagesizes(new int[]{6, 12, 100 }) .refresh(true) ) .sortable() .scrollable(scr=>scr.height(330)) .filterable() .resizable(resize => resize.columns(true)) ) <script type="text/javascript"> function ondatabound(e) { var grid = $('#grid').data('kendogrid'); // ask parametermap create request object var requestobject = (new kendo.data.transports["aspnetmvc-server"]({ prefix: "" })) .options.parametermap({ page: grid.datasource.page(), sort: grid.datasource.sort(), filter: grid.datasource.filter() }); // export link jquery object var $exportlink = $('#export'); // 'href' attribute - url navigate var href = $exportlink.attr('href'); // update 'page' parameter grid's current page href = href.replace(/page=([^&]*)/, 'page=' + requestobject.page || '~'); // update 'sort' parameter grid's current sort descriptor href = href.replace(/sort=([^&]*)/, 'sort=' + requestobject.sort || '~'); // update 'pagesize' parameter grid's current pagesize href = href.replace(/pagesize=([^&]*)/, 'pagesize=' + grid.datasource._pagesize); //update filter descriptor filters applied href = href.replace(/filter=([^&]*)/, 'filter=' + (requestobject.filter || '~')); // update 'href' attribute $exportlink.attr('href', href); } </script>
if understand correctly read function used pass data products database grid. datasource request object created javascript ?
how can alter code if dont have database model products ?
in project use repository data need ilist. how can use example above similar to:
ienumerable products = db.products.todatasourceresult(request).data;
in code below?
repo:
public class czaspracymaszynrepository {
public ilist<czaspracymaszyn> getczaspracymaszyn() { using (isession session = nhibernatehelper.opensession()) { var mylist = session.query<czaspracymaszyn>(); return mylist.tolist(); } }
}
model:
public class czaspracymaszyn { public virtual int id { get; set; } public virtual string stanowisko { get; set; } public virtual int czaspracy { get; set; } public virtual int czasawarii { get; set; } public virtual int awariaformy { get; set; } public virtual int awariarobota { get; set; } public virtual int awariawtryskarki { get; set; } public virtual int mokrysurowiec { get; set; } public virtual int puste { get; set; } }
controller:
public class tabelecontroller : controller {
czaspracymaszynrepository _repositoryczaspracymaszyn; public tabelecontroller() { _repositoryczaspracymaszyn = new czaspracymaszynrepository(); } public actionresult czaspracymaszyntabela() { ilist<czaspracymaszyn> czaspracymaszyn = _repositoryczaspracymaszyn.getczaspracymaszyn(); return view(czaspracymaszyn); }
}
i know of pretty vague did best describe problem.
Comments
Post a Comment