Today I was working with a simple form, a single textbox at the top with a button for adding items, and a gridview below for editing/deleting.
With 2.0’s validation groups, we can have validation on the “Add” form by setting validationgroup=’AddGroup’ and we can have our CommandField column of the GridView have validationGroup=’editDelete’. Ideally this will separate the 2 actions into their own validation groups and they won’t bother each other.
Well, if you are using ImageButtons instead of LinkButtons for your CommandField, there is a slight problem. The ImageButton actually gets instantiated as DataControlImageButton, which cannot use the CausesValidation property. Here’s what happens:
Now why does this generate a NotSupportedException? This is a perfectly valid scenario for validation? In this particular case I do not care about the edit/delete validation, but I do care about the Add validation.
If I change this scenario to work with LinkButton or just Plain Button, it all works out fine.
I have another rant regarding this same concept. The above screenclip is showing the RowDataBound event handler, and I am looping through the controls in the last column of the GridView. Now the last column is going to be the CommandField, so I know that there will be some commandcontrols in there. At this point I should not care whether it is a Button, an LinkButton, or an ImageButton because I will be treating them all the same: I will compare their CommandName properties to see what they are doing. So why can’t I just cast the control as Button? Well ImageButton doesn’t even derive from Button! I am sure there are reasons for that, but I don’t see them. This means I have to recompile my code if some UI guy decides they want a link instead of an image for their Edit command. Dumb, I say. An ImageButton, by nature, is a button, not an image. It’s behavior is a button. The way we treat it as developers is just like a button. It’s view or representation however is an Image, just like a standard button has a raised, rounded rectange as its view. Someone please explain to me why I’m wrong….
Now playing: Jimi Hendrix - Red House
I'm Ben Scheirman. I am a .NET software developer with a strong interest in agility. I work as a Principal Consultant with Sogeti.
Read more here.
email me
Ads by The Lounge
Disclaimer The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.