I have an aspx page where when someone changes the value in a Drop Down List the database is queried and records are displayed in an HTML table. As the table is created I add a Button control to each row. I have tried this with a CheckBox as well with similar results. I also wire up a click event for each button when it is created. All the events for the Buttons point to the same event.
The grid is created properly, with the button on each line. When I click one of the buttons the Page_Load event fires, but the click event does not.
When I dynamically create a button outside the grid from the Drop Down List's SelectedIndexChanged event it also does not fire the click event.
When I move the button creation code to the Page_Load event wrapped in an If (!IsPostback) block the Click event works properly.
It appears that if the control is not created in Form_Load or Form_Init the dynamic control's events do not fire. I have not found a solution to be able to do what I want, but I thought what I found in my research so far might be useful to someone.
Thursday, September 26, 2013
Monday, August 5, 2013
How to Get SQL Report Services Report Built With Report Builder to Display No Page Breaks on Screen, But Still Break When Printed
I created a report with Report Builder 3. My users are us to seeing reports displayed on screen with no page breaks. It looks like the default is to have page breaks. I found that in the report properties there are a couple of properties to manage page breaks.
In Report Builder, right click outside the report body and click Report Properties. In the properties window there is a page section when you have it sorted by property category. In that section there is a property called InterActiveSize. If you set the height and the width of this property both to be 0 the report is displayed on screen in one long page with no breaks.
The other property is PageSize. This has to do with the printed page. It is right below the margin property where you can control margins. I think this only controls them for the printed page.
In Report Builder, right click outside the report body and click Report Properties. In the properties window there is a page section when you have it sorted by property category. In that section there is a property called InterActiveSize. If you set the height and the width of this property both to be 0 the report is displayed on screen in one long page with no breaks.
The other property is PageSize. This has to do with the printed page. It is right below the margin property where you can control margins. I think this only controls them for the printed page.
Friday, August 2, 2013
Data Bound GridView and Asp.Net Ajax UpdatePanel
I tried loading a couple of grids through an update panel with a timer to try to get the rest of the page to display to the user quickly and do the heavy lifting of these two grids in the background.
I wrapped the two grids in an update panel and added a timer. I put code in the tick event of the timer. I loaded the page and it came up quickly and moments later the grids filled in. Moments after that all of my dynamic data i have created with template fields was erased. The main data that was being bound was still there.
As I researched it I found that the RowCreated event was firing repeatedly. I viewed the call stack and saw that it was being fired by system code that I could not see and not by my code.
I tried using session variables to get it to routed around the multiple calls, but the damage was being done before it got to the RowCreated event. The event also was getting null values for ID fields I was using to populate the grid correctly, which is why the dynamic data was not being displayed.
I did a couple of hours of research, but found nothing specific to my problem, but I did start stumbling upon two properties of the update panel, ChildrenAsTriggers and UpdateMode. Honestly I don't entirely understand UpdateMode yet, but ChildrenAsTriggers got me thinking that maybe the grid was triggering a refresh of its own somehow after I got everything set the way I wanted it.
I set ChildrenAsTriggers="false". It required that I have UpdateMode="Conditional". I think this also required that I have an explicit Trigger tag for the update panel that was set to the Tick event of my timer.
After all that, it appears to be working.
I wrapped the two grids in an update panel and added a timer. I put code in the tick event of the timer. I loaded the page and it came up quickly and moments later the grids filled in. Moments after that all of my dynamic data i have created with template fields was erased. The main data that was being bound was still there.
As I researched it I found that the RowCreated event was firing repeatedly. I viewed the call stack and saw that it was being fired by system code that I could not see and not by my code.
I tried using session variables to get it to routed around the multiple calls, but the damage was being done before it got to the RowCreated event. The event also was getting null values for ID fields I was using to populate the grid correctly, which is why the dynamic data was not being displayed.
I did a couple of hours of research, but found nothing specific to my problem, but I did start stumbling upon two properties of the update panel, ChildrenAsTriggers and UpdateMode. Honestly I don't entirely understand UpdateMode yet, but ChildrenAsTriggers got me thinking that maybe the grid was triggering a refresh of its own somehow after I got everything set the way I wanted it.
I set ChildrenAsTriggers="false". It required that I have UpdateMode="Conditional". I think this also required that I have an explicit Trigger tag for the update panel that was set to the Tick event of my timer.
After all that, it appears to be working.
Friday, June 28, 2013
IIS Routing and Paths With 404 in Them
We had a problem today with a path routing. We had a path similar to this http://localhost:54612/mydir/invoice/40414
It appeared that this path was never getting to the code, but being bounced back by IIS. The URL http://localhost:54612/mydir/40399 worked just fine.
After further research we found that it was number at the end with 404 in it that was breaking us. http://localhost:54612/mydir/30404 also broke.
The code we were using was
RouteTable.Routes.Add(new RegexRoute(@"^/mydir/invoice/(?\d+)/?$", new PathRouteHandler("~/myotherdir/file.aspx")));
Once we changed it to
RouteTable.Routes.Add(new Route(@"mydir/invoice", new PathRouteHandler("~/myotherdir/file.aspx")));
it worked.
We had to change the catching code to check the query string instead of the route path, but it worked.
We have yet to discover why it was behaving badly with invoice numbers containing 404. I would love to read your thoughts if you have run across such a thing.
It appeared that this path was never getting to the code, but being bounced back by IIS. The URL http://localhost:54612/mydir/40399 worked just fine.
After further research we found that it was number at the end with 404 in it that was breaking us. http://localhost:54612/mydir/30404 also broke.
The code we were using was
RouteTable.Routes.Add(new RegexRoute(@"^/mydir/invoice/(?
Once we changed it to
RouteTable.Routes.Add(new Route(@"mydir/invoice", new PathRouteHandler("~/myotherdir/file.aspx")));
it worked.
We had to change the catching code to check the query string instead of the route path, but it worked.
We have yet to discover why it was behaving badly with invoice numbers containing 404. I would love to read your thoughts if you have run across such a thing.
Friday, April 12, 2013
There is already an open DataReader associated with this Command which must be closed first
Every so often in our ASP.Net website we would get the error, "There is already an open DataReader associated with this Command which must be closed first" referring to a SqlDataReader. We would tweak code here and there and get it to go away. Later another code tweak would bring it back. We have no idea what is causing it.
It is in a block of code that creates a SQLCommand, creates a SQLDataReader, and destroys the SQLDataReader and SQLCommand. We are not sure how it is possible that another reader is executing on that command.
As a work around until we can find the issue we have added this attribute
MultipleActiveResultSets=True
to our connection string and it has seemed to have bypassed the problem. I know it likely causes other problems, but due to the environment we work it that's what we have to do.
Installing Spring...

Installing Spring...
50% ready...
! Installation failed. Error 404 Spring not found. Spring is not available in your state. Please try Florida.
ReportViewer Control ASP.Net Disabled When Routing
I was experimenting with possibly using Microsoft's Report Builder tool to create reports and then use the ReportViewer WebForms control to display them on a web page.
I also noticed that the line starting with <add name=": Reserved-ReportViewerWebControl-axd" had more attributes assigned than what the ones in my code had.
Everything worked. No compile errors. The control displayed the report and was not disabled.
I had no time to figure out if it was the extra attributes or the extra lines of code. All I know is it works. I hope this post will help someone else climb out of what they are struggling with because this was horrendously frustrating.
Update:
After adding all that and getting ready to deploy, I moved the site to a different location on the same machine. Not even a different machine. The original location continued to work fine, but the new location gave the disable ReportViewer control. I searched and search again.
When I had the problem previously I tried disabling routing for the control with the follow 2 lines of code:
When I would create a small test site everything was great. When I would add a report to our existing site it would show me a disabled ReportViewer task bar and no data from the report.
It took me forever to figure out why this was happening and longer to track down solutions.
Everywhere I went I saw people saying that it was something in my web config. They sited that SQL Server 6 needed a different section in the web config than SQL Server 7 needs. I saw that my web config had both and at one point I removed the older declaration and things started to work.
Then it happened. The other day I was adding controls and experimenting with the page and all of a sudden I was back to square one. I did ctrl-Z until I had removed all the changes I had been making on the page and got everything back to the way they were in code. It didn't fix the display of the page.
This was horrible. I was so close to delivering something and I had even told my superiors it was just about done and now I was stuck with a broken page I had no idea how to fix. Nothing logically made sense.
I knew that one of the big differences with our site and a quick and dirty site with one page was routing. We have a file filled with different routings. I decided I would try disabling them and see what happened. Sure enough it worked. The problem was that the rest of the site was broken without the routings being turned on.
I searched and searched and kept finding the same old things about the web config. Then I found a block of code like this.
<handlers> <remove name="WebServiceHandlerFactory-Integrated"/> <remove name="ScriptHandlerFactory"/> <remove name="ScriptHandlerFactoryAppServices"/> <remove name="ScriptResource"/> <add name=": Reserved-ReportViewerWebControl-axd" path="Reserved.ReportViewerWebControl.axd" verb="*" type="Microsoft.Reporting.WebForms.HttpHandler" resourceType="Unspecified" preCondition="integratedMode" /> <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> <add name="UrlRoutingHandler" preCondition="integratedMode" verb="*" path="UrlRouting.axd" type="System.Web.HttpForbiddenHandler, System.Web, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"/> </handlers>This is much like the web config stuff I had seen elsewhere, but it had a bunch of other stuff around it. I have no idea if they relate, but I plugged them all in wholesale and decided I would yank out what didn't compile.
I also noticed that the line starting with <add name=": Reserved-ReportViewerWebControl-axd" had more attributes assigned than what the ones in my code had.
Everything worked. No compile errors. The control displayed the report and was not disabled.
I had no time to figure out if it was the extra attributes or the extra lines of code. All I know is it works. I hope this post will help someone else climb out of what they are struggling with because this was horrendously frustrating.
Update:
After adding all that and getting ready to deploy, I moved the site to a different location on the same machine. Not even a different machine. The original location continued to work fine, but the new location gave the disable ReportViewer control. I searched and search again.
When I had the problem previously I tried disabling routing for the control with the follow 2 lines of code:
RouteTable.Routes.Add(new Route("{resource}.axd/{*pathInfo}", new StopRoutingHandler()));
RouteTable.Routes.Ignore("{resource}.axd/{*pathInfo}");
Neither worked. When I ran into the problem again I seemed to recall one post saying that the order of routes mattered. Previously I had tried to remove the routes with these lines at the end of all the routing, thinking it would remove whatever got added. It appears that it is the opposite. If you tell it not to route from the start then nothing gets applied to it in the other routes.
I moved the lines to the top of the routing code and tested each line. I found that either of them worked.
Subscribe to:
Posts (Atom)