Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
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>