LLBLGenProDataSource2, GridViews, and Case Sensitivity

I've been playing about with LLBLGenPro's Object Data Source recently.

Mostly because I want to know if it's the sort of thing which could actually be used in a commercial project, or whether it's not quite all the way there yet. In my experience, working with GridView style pages goes one of two ways:

  1. They're simple, basic CRUD type operations. Maybe some sorting and/or paging.
  2. They're so insanely custom that you might as well have written your own control and not even used a GridView/Repeater.

I'm looking at LLBL's Data Source for the occasions which fall into option #1.

So far, it's looked pretty useful. You declare your data source, link it to your GridView (or whatever), and away you go. You get basic CRUD operations against your model data without needing to do anything other than use declarative programming. There's something nice about staring at an ASPX codebehind file which is totally empty (on a page which actually does something of course). And it saves time. For the simple pages (basic admin pages are a good example, reference data and the like) it's a great way to save time, and to save developers going insane writing the same sort of code against different model data. It's also good in the sense that it leverages a feature in a product you've already purchased, and puts means you're using code which has already been through a lot of testing and other such QA processes. You can also wire in custom events if you want, so the option of adding business logic and extending beyond basic CRUD operations is there if you need it.

None of which is the topic of this post. This post is simply here because I've been pondering over something on and off for the past few days which simply wouldn't work, and I promised myself I'd write about it when I found the problem because it was so annoying. So here we are. We really must stop meeting like this.

Problem: When using an LLBLGenProDataSource2 (I roll adapter styles) with a GridView the data is bound correctly, but all updates fail. Everything appears wired up correctly, in fact the code could have been copied from another page in the same solution and simply been pointed at a different entity in all the right places.

Solution: The DataKeyNames property of the GridView was set to 'ConfigurationID'. The fieldname in the database was 'ConfigurationID'. I changed the DataKeyNames property to 'ConfigurationId' (note the case of the last character), and all the updates started working.

Reason: LLBLGenPro converts all properties of it's generated entities into proper Camel Case, so the property on my entity was actually 'ConfigurationId'. The DataBinder is much more forgiving here, so you'll see values in your column regardless of your case. You can use alternating l33tspeak if you like such as coNfIgUraTiOnID and it'll still work. L33t! However the DataKeyNames property isn't as forgiving. It needs to match the casing of your generated entity, and not your source database.

Why is it that problems around casing are so common, so simple to solve in terms of work required, and yet often so hard to find?

What was also most interesting here, is that the positive point I just mentioned in that there's no code at all ended up being part of the reason this took so long to debug. There's nothing to debug! I simply sat there staring at the database schema and the various ASPX declarations going "THEY'RE THE SAME! WHATS WRONG!".

Sometimes part of being a good coder is knowing when to walk away from a problem. And so spending 10 minutes on this each night for a few nights has worked out well in terms of reducing the frustration factor.

 Print | Posted on Wednesday, September 26, 2007 10:44 PM | Filed Under [ ASP.NET Web Development ]



Feedback

Gravatar

# re: LLBLGenProDataSource2, GridViews, and Case Sensitivity

Hi - random dry-by comment

been playing with this tool as well with a mixture of success/failure.

just popped by cause of the link to
The entity is out of sync with its data in the database. Refetch this entity before using this in-memory instance.

Whether or not I get this error seems dependant on what my client is eh. a swf or aspx page.

Anyway nice article..keep it up.

M

9/26/2007 11:21 PM | mike


Post Comment

Title  
Name  
Email
Website / Url
 

Your comment

   
Ensure the word in this box says 'orange':
 
Please add 6 and 5 and type the answer here:





Due to excessive comment spam, all comments are now being moderated. If you're a comment spammer then you're wasting your time here. Your comments will not be published - ever.


About me

My name is Ross Hawkins and I'm a developer, consultant, business owner and writer based in Auckland, New Zealand (pictured below!). My current work revolves around ASP.NET, C#, jQuery, Ajax, SQL Server, and a mix of other Microsoft development technologies.

I also have about 15 years of experience with IBM Lotus Notes/Domino and associated technologies. While Notes/Domino is no longer my primary focus I still like to dabble and keep my skills up to date.

I own and run 2 businesses - Hawkins Consulting Services, and Ignition Development.

Bethells Beach, located in sunny West Auckland, New Zealand




Subscribe

Subscribe to this feed


Search




Popular Content

Troubleshooting WebResource.axd

The .NET 2.0 framework changed the way clientside JavaScript is delivered to the browser. Previously, ASP.NET 1.1 used the aspnet_client directory whereas now 2.0 uses WebResource.axd.

Published on October 8, 2006

jQuery Wildcard Selectors - some simple examples

I wrote about jQuery wildcard selector syntax briefly back in 2009, and since then that post has received a lot of views – way more than a post that brief should ever have seen..

Published on October 14, 2011

Microsoft AJAX Extensions: Sys.Debug is null or not an object

One of the breaking changes which was made with the 1.0 release of the Microsoft Ajax Extensions was the renaming of the 'Debug' class to 'Sys.Debug' for reasons of compatiability with other frameworks. Breaking changes like this can often be a source of frustration..

Published on May 22, 2007

Simple ASP.NET Character Counter

A textbox character counter is a pretty simple piece of functionality, and there's a lot of different ways to apply one to your application. The following method is nice and simple, and can be done using only clientside JavaScript if required, or combined with server side code in order to create a more dynamic effect

Published on December 4, 2006

Simple ASP.NET Character Counter - with Master Page Support

A quick update to my previous character counter article adding some changes for those using it with Master Pages.

Published on February 7th, 2009

Adding Tooltips to Gridview Headers

As the title says, this is a very simple but dynamic way of achieving tooltip text on a header column. It's not overly flash, but it's lightweight and quick to implement.

Published on April 15, 2007

SQL Server Web Report Viewer Issues on Windows 2008 Server/IIS7

A fix for another AXD related issue, this time with the SQL Server Web Report Viewer Control which was being served up via IIS7 on a Windows 2008 server.

Published on June 2, 2007
Updated on April 10, 2008





Archives

May, 2012 (1)
April, 2012 (4)
March, 2012 (2)
February, 2012 (4)
January, 2012 (3)
December, 2011 (3)
November, 2011 (8)
October, 2011 (9)
September, 2011 (8)
August, 2011 (5)
July, 2011 (4)
June, 2011 (7)
May, 2011 (5)
April, 2011 (3)
March, 2011 (8)
February, 2011 (4)
January, 2011 (3)
December, 2010 (8)
November, 2010 (5)
October, 2010 (6)
September, 2010 (7)
August, 2010 (11)
July, 2010 (12)
June, 2010 (8)
May, 2010 (8)
April, 2010 (4)
March, 2010 (8)
February, 2010 (6)
January, 2010 (12)
December, 2009 (13)
November, 2009 (11)
October, 2009 (12)
September, 2009 (12)
August, 2009 (2)
July, 2009 (7)
June, 2009 (12)
May, 2009 (9)
April, 2009 (9)
March, 2009 (9)
February, 2009 (8)
January, 2009 (7)
December, 2008 (6)
November, 2008 (7)
October, 2008 (9)
September, 2008 (12)
August, 2008 (9)
July, 2008 (6)
June, 2008 (24)
May, 2008 (13)
April, 2008 (16)
March, 2008 (8)
February, 2008 (10)
January, 2008 (1)
December, 2007 (14)
November, 2007 (11)
October, 2007 (11)
September, 2007 (13)
August, 2007 (11)
July, 2007 (5)
June, 2007 (15)
May, 2007 (11)
April, 2007 (9)
March, 2007 (9)
February, 2007 (10)
January, 2007 (8)
December, 2006 (18)
November, 2006 (11)
October, 2006 (14)
September, 2006 (9)
August, 2006 (10)
July, 2006 (4)
June, 2006 (4)
May, 2006 (6)
April, 2006 (3)
February, 2006 (6)
January, 2006 (10)
September, 2005 (2)
August, 2005 (4)

Post Categories

ASP.NET
AJAX
Amusing
NZ
NZ Trains
Notes/Domino
Visual Studio
Web Development
Miscellaneous
Me
Rugby
C#
SQL