Databound controls are at once very easy and very frustrating. If you just need to do some simple databinding that gets a list of items on the screen and you need the ability to edit those items, you are all set.
But once you need to do anything that deviates from that simple pattern, you are kind of stuck. One of the problems involves accessing a control in a templated item.
Probably the most common place this shows up is in the FormView control. But you’ll also experience the problem using the GridView control with a templated column.
There is a pretty simple solution to the problem. If you are in a form view, all you need to do is use the FindControl() method of any control. The problem is finding which parent control houses the control we are looking for. So what we really need is a recursive control that looks for the control with a particular ID in any of the controls that are a child of the control or any of its child controls or any of its child controls, etc., until it finds the control.
I’ve written such a function for my utility box.
public static Control FindControlByID
(string id, ControlCollection controls)
Control returnControl = null;
foreach (Control c in controls)
if (c.ID == id)
returnControl = FindControlByID(id, c.Controls);
if (returnControl != null)
Notice, it is a static method so we can call it from anywhere without having to instantiate the class it is in.
So now, if I’m in a row and I need to find another control in that row, I can write code like this
Protected Sub m_grid_RowUpdating
(Object sender,GridViewUpdateEventArgs e)
int v= (DropDownList)(MyUtils.FindControlByID
The only real tricky point left is that you may need to climb up to a parent to grab the right controls collection. But once you figure how how far up you need to climb, the rest is academic.
And before someone says it in the comments, obviously you’ll want to check to make sure you got the control using a if(var == null) statement prior to retrieving the value.
Other places talking about Finding Controls in ASP.NET
gridview edit – FindControl(“txtFirstName”); TextBox tLastName = (TextBox)gr.FindControl(“txtLastName”); TextBox tEmail = (TextBox)gr.FindControl(“txtEmail”); Label lFirstName = (Label)gr.FindControl(“lblFirstName”); Label lLastName = (Label)gr. …
Using FindControl for a control in the ItemTemplate of a ListView … – I’ve been playing around with the ListView control recently and am quite impressed with it. I like how it gives full control over the markup used as apposed.
Other post in ASP.NET
- ASP.NET GridView Edit All Rows At Once - October 30th, 2007
- Validating A WebForms Checkbox . . . - January 4th, 2008
- ListView and the DataPager - January 7th, 2008
- The case of the disappearing session variables - January 14th, 2008
- Storing a DataRow into a Session (server) variable - January 15th, 2008
- The point of a multi layer architecture - January 31st, 2008
- FormView Edit and Add - May 12th, 2008
- Virtual Files using HttpContext.RewritePath() - July 17th, 2008
- ASP.NET AJAX using JSON - Here's how. - August 4th, 2008
- SystemException: The trust relationship between the primary domain and the trusted domain failed - November 18th, 2008
- GridViews - Multiple Rows Per Record - December 17th, 2008
- Response.Redirect() executes too soon on the Server. - January 27th, 2009
- Tab Control ActiveTabIndex Lost on Postback - February 25th, 2009
- ASP.NET Application_Error Detecting 404's - March 2nd, 2009
- Infinite 302 Loop - How would you even know? - March 11th, 2009
- Unable to find connection...for object web.config - March 18th, 2009
- Dynamically Change class Attribute From ASP.NET - September 29th, 2009
- HttpContext.Items vs Session - October 12th, 2009
- Access a control by ID From Within a Databound Control - November 2nd, 2009
- GridView and Updating A Row Manually - November 4th, 2009
- Embedding Google Search Appliance Results in ASP.NET - November 5th, 2009
- ASP.NET Cross Domain Form Submission - November 11th, 2009
- ASP.NET Interview Questions For New College Graduates - November 12th, 2009
- ASP.NET Dynamic Validator - November 16th, 2009
- The Google Appliance and Forms Authentication - August 4th, 2010
- Prevent Postback on Buttons - October 11th, 2010
- Azure CDN Blob Storage Case Sensitive Issue - April 17th, 2012
- ASP.NET JSON and ViewState - September 25th, 2012
- Panel DefaultButton does not work - December 25th, 2012
- Why CSS ID selectors are Evil in ASP.NET Web Forms - February 26th, 2013
- Sorting the ListView in ASP.NET - March 5th, 2013
- Multi-Step Processing in ASP.NET - May 8th, 2013
- ASP.NET Web Design Software - May 15th, 2013
- Test Sending Email without a Server in ASP.NET - June 5th, 2013
- Tracking Down Performance Issues in ASP.NET - July 24th, 2013
- Unrecognized Tag Prefix or Device Filter ‘asp’ - July 31st, 2013
- WebServices – Error Handling - December 11th, 2013
- Converting a DataList to a ListView - December 25th, 2013