Wednesday, May 27, 2009

I was wanting to be able to perform a backend database service in a batch mode, but wanted to make the actual batch processing part of it as encapsulated as possible.

I created a BO that returned an IEnumerable<List<MyBO>>, but it didn't use any yield statements, it just called a data access layer that was using the yield statements. I was concerned if this was going to work, so I decided to test it using snippet compiler.

Wednesday, May 13, 2009

I had a user control at work that dynamically added TextBoxes to a HtmlTable. After figuring out how to even access the dynamic controls, I needed to be able to retrieve them easily. Since the ids were based on a primary key id from the database, I couldn't determine what the ids of the TextBoxes were using the FindControl() method. I could hit the database again to find the ids and then use the FindControl method, but I didn't like having another database hit if I could help it.

What I wanted to be able to do was enumerate over all of the controls located within my user control. After thinking about it for a bit, I decided to finally make use of the C# "yield" statement and create my own recursive iterator method:

I wanted to be able to see all my Session data on my webpage, but only when I actually had a debugger attached. My solution was a two step approach:

Create a user control that ouputs the session into a table

Add that user control to the to the page if a debugger is attached

To accomplish step 1, I created a user control which is located below. It overrides the Render method, directly writing a text html table to the HtmlTextWriter. It contains two other methods, one to create the table to display the session information in, iterating over all the values in the session, and another that uses reflection to output the value of all properties of non-simple types.

To accomplish step 2, all that was needed was to override the OnLoad event in my BasePage class from which all other classes in my website inherit, check for a debugger, and add my user control from step 1 to the page if one was attached.

I had an extremely annoying issue trying to be able to create textboxes dynamically within an AJAX UpdatePanel during on the PostBack. Below is the code that I used to create a textbox, and added it to a TableCell. It runs during an AJAX PartialPostback created on a DropDownList SelectedIndexChangedEvent.

My TextBox was showing up exactly how I wanted it to, but when I'd attempt to access the textbox after the user clicked the button submit, the textbox didn't exist anywhere on my page. After googling for a bit, it made sense to me that I had to re-add my dynamic control to my page, but what I couldn't find was how to access the answerText.Text value from the ViewState. I finally discovered that the TextBox had to be readded during the Page_Load or Page_Init events in order to be able to access their ViewState values, and it is only after the Page_Load event finishes that the values actually become accessible, and only if you add the objects in the some location within the heirarchy, and with the same id value.

I was thinking that somehow automagically I should be able to access this controls from the ViewState, and when I readded the control, it would override the value. Boy was I wrong.