i have multiple crystal reports in checkboxlist, user can print/show multiple reports @ same time.
currently using session pass reportdocument, of time session value replace before assigning crystal report, result multiple reports contain same data. have applied 3 sec delay on each loop not reliable solution. , image not displaying in reports.
is there elegant technique this??
or
what alternative session variable?
jquery:
$.each(chkboxarr, function (index, value) { var w = window.open(); $.ajax({ type: "post", url: "printreports", traditional: true, data: { id: value}, datatype: "json", success: function (data) { w.document.write(data); }, error: function () { alert("error"); } }); }); controller:
public actionresult printreports(id) { reportdocument rpt = new reportdocument(); rpt.load("~/reportfilename.rpt"); httpcontext.session["rpt"] = rpt; return redirect("~/viewer.aspx"); } viewer.aspx.cs
page_init(object sender, eventargs e) { var rpt = system.web.httpcontext.current.session["rpt"]; crystalreportviewer1.reportsource = (reportdocument)rpt; }
javascript:
$.each(chkboxarr, function (index, value) { $.ajax({ url: "printreports", type: 'get', data: { id: value}, contenttype: "application/json; charset=utf-8", datatype: 'json', success: function (data) { if (data.success) { var url = 'viewer.aspx?type=' + data.url; window.open(url); } else { alert(data.message); } } }); }); controller:
public actionresult printreports(id) { reportdocument rpt = new reportdocument(); rpt.load("~/reportfilename.rpt"); string guid = guid.newguid().tostring(); session[guid] = rpt; return json(new { success = true, url = guid }, jsonrequestbehavior.allowget); } viewer.aspx.cs
protected void page_load(object sender, eventargs e) { reportname = request.querystring["type"].tostring(); reportdocument doc = new reportdocument(); doc = (reportdocument)session[reportname]; if (doc == null) response.write("<h2>nothing found; no report name found</h2>"); crystalreportviewer1.reportsource = doc; } without sessions:
$.each(chkboxarr, function (index, value) { var url = 'viewer.aspx?id=' + value; window.open(url); }); protected void page_load(object sender, eventargs e) { reportdocument rpt = new reportdocument(); rpt.load("~/reportfilename.rpt"); crystalreportviewer1.reportsource = rpt; } for displaying image add aspx file crystalimagehandler.aspx in folder viewer.aspx exist. add
<httphandlers> <add verb="get" path="crystalimagehandler.aspx" type="crystaldecisions.web.crystalimagehandler, crystaldecisions.web, version=13.0.2000.0, culture=neutral, publickeytoken=692fbea5521e1304"/> </httphandlers> in weconfig... version number varies depends on crystalreport version
Comments
Post a Comment