So, today I was working with the ASP.NET Report Viewer Control. If you don't know what that is, it's an ASP.NET control that comes with .NET, and what it does is allows you to display a SSRS Report on your website. True to ASP.NET, it seems very simple at first, drag, drop, set parameters... and then of course, there's the fallbacks on the things it cannot do.
A major thing to me, when I'm developing a website, especially recently, is performance. I hate going to a website, and waiting more than 3-5 seconds for a page to be rendered and useable on my screen. So, when I build a webpage, it simply won't do to put my users through what I myself can't tolerate. (Plus, I get less frustrated when debuggin that way).
Well, turns out the way this control works, it's kind of neat, there's a little property to allow it to do what it needs to do asynchronously, so it renders the control quickly, and it then goes and gets the report. And I thought, hey, that's neat. But here's the thing, the application I am working on, is not an Asp.Net powered app, it's actually an XSL Transform powered application. For now, I simply do not know if it's worth it/possible to get a report from reporting services rendered to a webpage in using an XSL Transform. It definately is not a built-in "Feature".
So, the solution I came up with was to create one single ASP.NET Page, to be the master report viewer page. The one ring to display them all if you will. Keep in mind, I'm not really a front end guy, so my experience with Asp.NET is somewhat limited. I go ahead, add the Aspx page to my project, do the necessary configuration/handler building/setup stuff required to make it work.
My next step is to add the report viewer control to the page. Easy. Drag, Drop, done. I then proceed to the code behind to do a little "grab report name/report parameters out of the query string" code, and pass them to the control. Again, easy. Try it out, it works. Don't like the fact that when I resize the page, it doesn't resize the control, break-out some mad javascript goodness, and ok, vola, it resizes with the page.
INTERMISSION RANT: Why is the "Auto-resize control to parent" feature non-existant in like ALL built-in Asp.net Controls??
END RANT
OK, so now we seem to have all that working. Great. Fire it up, sure enough it works, the report renders to the page. I'm done right?
Not quite. Turns out, one of my reports, is a Summary Report, that links to detail report. Linking between reports, breaks the whole process.
Workaround? Seems to me the only work around is to change how the Summary Report Navigates to the detailed report, but changing the navigation property of said report items in the report, so instead of linking to a report, I link to the report viewer page I just created, passing in the required parameters into the query string.
Well, works like a charm, but breaks the whole "Link To Report" feature in my reports, and breaks the back button functionality of the report itself. Also, true to Asp.Net Style, the whole page does a post back, and then re-renders itself with the new report.
So now, I'm digging through articles, reverse engineering the control etc, to see if there's some cool client side event I can call to trigger the report to load the detailed report client side, so my page doesn't have to go through it's entire lifecycle to simply reload part of the page.
END OF ARTICLE RANT: Also, I'm not a huge fan of the way the report viewer works. It essentially, renders an IFRAME containing the report, and inside the IFRAME it's doing a bunch of Frameset stuff, that's really annoying. It's really bad HTML output to the screen, and doing way more garbage than it should, but who am I to judge right?
END OF END OF ARTICLE RANT