While working on customer issue,I have faced an interesting scenario to find a SharePoint control. I though it’s as easy as in ASP.NET where I have write just one single line to code to find the control in page.

Control myControl = this.FindControl(_ControlID);

But when it comes to SharePoint, I didn't get the control in the same way. Let me show you a snippet of my custom aspx page :-

   1: <asp:TreeView runat="server" id="TreeView1" DataSourceID="siteMapDataSource2" ></asp:TreeView>
   2:  <PublishingNavigation:PortalSiteMapDataSource ID="siteMapDataSource2" Runat="server"
   3:         SiteMapProvider="CombinedNavSiteMapProvider" EnableViewState="true"
   4:         StartFromCurrentNode="true" StartingNodeOffset="0" ShowStartingNode="false"
   5:         TreatStartingNodeAsCurrent="true" TrimNonCurrentTypes="Heading"/>

following is code snippet that helps to find the TreeView control from the page :-

   1: <script runat="server">
   2: TreeView oWPM;    
   3: protected override void OnLoad(EventArgs e)
   4: {
   5:        //base.OnLoad(e);
   6:         foreach (Control c in this.Page.Controls)
   7:         {
   8:  
   9:  
  10:             FindControlsRecursive(c);
  11:         }
  12:  
  13:    }
  14:  
  15:  private void FindControlsRecursive(Control root)
  16:  {
  17:  
  18:                       foreach (Control oControl in root.Controls)
  19:                       {
  20:  
  21:                           if (oControl.GetType().FullName == "System.Web.UI.WebControls.TreeView")
  22:                           {
  23:  
  24:                               this.oWPM = (System.Web.UI.WebControls.TreeView)oControl;
  25:                               this.oWPM.TreeNodeDataBound +=new TreeNodeEventHandler(oWPM_TreeNodeDataBound);
  26:                              
  27:                             
  28:                           }
  29:                           else if (root.HasControls())
  30:                               FindControlsRecursive(oControl);
  31:                       }
  32:  
  33:                   }
  34:  
  35:                   void oWPM_TreeNodeDataBound(object sender, TreeNodeEventArgs e)
  36:                   {
  37:                       SiteMapNode smn = e.Node.DataItem as SiteMapNode;
  38:                       if(smn["Target"] != null)
  39:                       {
  40:                         Response.Write(smn["Target"].ToString());
  41:                       }
  42: }            
  43: </script>