Practical ASP.NET

Handling Update Exceptions in the DataView Events

Peter shows a "code-lite" way to handle exceptions when using DataView to update data.

Exploiting the DataView events means less work for you and more robust code in your application. Just don't be afraid to write less code.

In the introductory course on ASP.NET that I wrote for Learning Tree International, we eventually come to the moment when we display data in a page. The students drop a DataSource and a DataView on the page, configure the two objects, and retrieve the data.

The only problem is that there will be at least one student in each class who will complain that "I didn't get to write any code -- we just used the Wizards."

Unless you're paid by the hour, it's not clear to me why this is a bad thing: The less code I write, the less likely I am to introduce a new bug.

More critically, the complaint reflects a fundamental misunderstanding of the ASP.NET 2.0 paradigm: Configure components to get base behavior and write code only for your special needs.

To placate my unhappy students, I usually show them how to write code to handle truly "special events": exceptions when updating data with the DataView.

Exploiting DataView Events
The DataView controls fire events both before and after each data access activity. The event names are similar among all the DataViews (GridView, FormView, DetailsView, etc.). A Deleting event before any deletions/a Deleted event after the deletion; an Updating event before updates/an Updated afterward, and so on.

One of my gurus, Ken Getz, refers to these as the "gerund events" and the "past participle events." I refer to them as the *ing events and the *ed events. I think my terms are more helpful but you're welcome to your opinion.

The *ing events are useful for preventing problems; anything you can do there to detect bad data means one less trip to the database server and faster feedback to your users. But the *ed events on the DataViews are where you'll handle problems when something goes awry.

The e parameter on those events provides five really useful features: access to any Exception object raised during the data access, a flag to keep the DataView in edit or insert mode, the number of records changed (primarily useful if you're using the SqlDataSource), and a flag to tell ASP.NET that you've taken care of any problems.

When I write an *ed event, I first check to see if there was an error during the update by checking the e parameter's Exception property. If there is an Exception object with an error that I'm willing to handle, I do the decent thing and display the error message from the Exception object to the user. I also usually keep the DataView in change mode by setting the e parameter's KeepInEditMode (in Updated events) or KeepInInsertMode (in Inserted events) property to True. This gives the user another chance to enter their change (the user can always click the Cancel button to get out). I also set the e parameter's ExceptionHandled property to True because if I don't, the error will propagate up through the calling modules and ASP.NET may terminate my application.

If I'm not willing to handle the exception, I do nothing: The ExceptionHandled property defaults to False so the error will just move on up until some component takes care of it.

If I don't have an Exception, I still check to see if any records were updated by looking at the e parameter's AffectedRows property. If the AffectedRows property is 0, then it probably means that my user's data was changed after the user retrieved it and I used optimistic currency to skip the update (see my column on optimistic currency, "Handling Data Contention with Optimistic Concurrency"). For me, the right thing to do when someone else has changed the data is to re-DataBind the associated DataView to let the user see the latest data.

Putting it all together, the essential *ed event code looks like this.

Sadly, these eight lines of code usually aren't enough to satisfy my code-hungry students. They still go out of the room grumbling that all I've shown them is how to work with the Wizards and, now, how to fiddle with properties.

About the Author

Peter Vogel is a system architect and principal in PH&V Information Services. PH&V provides full-stack consulting from UX design through object modeling to database design. Peter tweets about his VSM columns with the hashtag #vogelarticles. His blog posts on user experience design can be found at http://blog.learningtree.com/tag/ui/.

comments powered by Disqus

Featured

  • Microsoft Revamps Fledgling AutoGen Framework for Agentic AI

    Only at v0.4, Microsoft's AutoGen framework for agentic AI -- the hottest new trend in AI development -- has already undergone a complete revamp, going to an asynchronous, event-driven architecture.

  • IDE Irony: Coding Errors Cause 'Critical' Vulnerability in Visual Studio

    In a larger-than-normal Patch Tuesday, Microsoft warned of a "critical" vulnerability in Visual Studio that should be fixed immediately if automatic patching isn't enabled, ironically caused by coding errors.

  • Building Blazor Applications

    A trio of Blazor experts will conduct a full-day workshop for devs to learn everything about the tech a a March developer conference in Las Vegas keynoted by Microsoft execs and featuring many Microsoft devs.

  • Gradient Boosting Regression Using C#

    Dr. James McCaffrey from Microsoft Research presents a complete end-to-end demonstration of the gradient boosting regression technique, where the goal is to predict a single numeric value. Compared to existing library implementations of gradient boosting regression, a from-scratch implementation allows much easier customization and integration with other .NET systems.

  • Microsoft Execs to Tackle AI and Cloud in Dev Conference Keynotes

    AI unsurprisingly is all over keynotes that Microsoft execs will helm to kick off the Visual Studio Live! developer conference in Las Vegas, March 10-14, which the company described as "a must-attend event."

Subscribe on YouTube