I am not sure if I follow. I have added the source to the control if you wish to investigate. I have a lot of trial and error in it. My basic problem is I want link buttons to fire the NavigateButtonClick Method. So far I have had no luck.
using
System;
using
System.Collections.Generic;
using
System.Text;
using
System.Web.UI.WebControls;
using
System.ComponentModel;
using
System.Web.UI;namespace Navitas.Web.UI.WebControls.Extended
{
public class AdvancedTreeView : TreeView, IPaging, INamingContainer, IPostBackEventHandler
{
public AdvancedTreeView() //: base()
{
bool myControlIsCreated = this.ChildControlsCreated;
//NodeCount = this.Nodes.Count;
//_controls = new ControlCollection(this); _navigationTopBarNode = new AdvancedTreeNode(this);
_navigationBottomBarNode =
new AdvancedTreeNode(this);
//this.ConstructPagingNavigationNode()
//RefreshButtons();
//InitializeComponent();
}
/*private ControlCollection _controls;
public ControlCollection Controls
{
get { return _controls; }
}*/
/*private bool _childControlsCreated = false;
protected override bool ChildControlsCreated
{
get { return _childControlsCreated = false; }
set { _childControlsCreated = value; }
}*/
private int _checkboxIndex = 1;
private AdvancedTreeNode _navigationTopBarNode;private AdvancedTreeNode NavigationTopBarNode
{
get { return _navigationTopBarNode; }set { _navigationTopBarNode = value; }
}
private AdvancedTreeNode _navigationBottomBarNode;private AdvancedTreeNode NavigationBottomBarNode
{
get { return _navigationBottomBarNode; }set { _navigationBottomBarNode = value; }
}
private string _alternateNodeColor; public string AlternateNodeColor
{
get { return _alternateNodeColor; }set { _alternateNodeColor = value; }
}
private string _alternateBackGroundImage;public string AlternateBackGroundImage
{
get { return _alternateBackGroundImage; }set { _alternateBackGroundImage = value; }
}
private bool _paging;public bool EnablePaging
{
get { return _paging; }set { _paging = value; }
}
//private int _nodeCount;public int NodeCount
{
get { return this.Nodes.Count; }
}
/// <summary>
/// Since the Nodes TreeNodeCollection is sealed, this is used to extend the Nodes.Add functionality
/// to allow for node indexing.
/// </summary>
/// <param name="node">The Node being added.</param>public void AddNode(AdvancedTreeNode node)
{
this.Nodes.Add(node);
//_nodeCount++;
node.Index = NodeCount;
}
public void AddNode(TreeNode node)
{
this.Nodes.Add(node);
//_nodeCount++;
}
protected override TreeNode CreateNode()
{
AdvancedTreeNode node = new AdvancedTreeNode(this, false);
//_nodeCount++;
node.Index = NodeCount;
return node;
}
/// <summary>
/// Navigation Node Controls
/// </summary>LinkButton btnFirst;
LinkButton btnPrev;LinkButton btnNext;
LinkButton btnLast;Label lblPageNumber;
Label lblPageCount;
Label lblof;#region IPaging Members
/// <summary>
/// Move event raised when a move is performed
/// </summary>public event EventHandler Move;
// variables we use to manage stateprivate int _recordsPerPage = 10;
/// <summary>
/// Number of records per page
/// </summary>
/// <value>The records per page.</value>public int RecordsPerPage
{
get { return _recordsPerPage; }set { _recordsPerPage = value; }
}
/// <summary>
/// Hide when on single page hides controls when
/// there is only one page
/// </summary>
/// <value><c>true</c> if [hide on single page]; otherwise, <c>false</c>.</value>public bool HideOnSinglePage
{
get { return Convert.ToBoolean(ViewState["HideOnSinglePage"]); }set { ViewState["HideOnSinglePage"] = value.ToString(); }
}
//private int _pageNumber = 1;
/// <summary>
/// Current page number
/// </summary>
/// <value>The page number.</value>public int PageNumber
{
get { return Convert.ToInt32(ViewState["PageNumber"]); }set { ViewState["PageNumber"] = value; }
}
/// <summary>
/// Gets or sets a value indicating whether validation is performed when the control buttons are clicked.
/// </summary>
/// <value><c>true</c> if [causes validation]; otherwise, <c>false</c>.</value> [Description("Gets or sets a value indicating whether validation is performed when the control buttons are clicked.")]public bool CausesValidation
{
get
{
object causesValidation = ViewState["CausesValidation"];
if (causesValidation != null)return (bool) causesValidation;
elsereturn true;
}
set { ViewState["CausesValidation"] = value; }
}
/// <summary>
/// Total Record Count
/// </summary>
/// <value>The record count.</value>public int RecordCount
{
get
{
return NodeCount;
}
//Convert.ToInt32(ViewState["RecordCount"]); }/*set
{
ViewState["RecordCount"] = value;
}*/
}
/// <summary>
/// Total pages count
/// </summary>
/// <value>The page count.</value>public int PageCount
{
get
{
// Calculate page count int _PageCount = RecordCount/RecordsPerPage;
// adjust for spilloverif (RecordCount%RecordsPerPage > 0)
_PageCount++;
if (_PageCount < 1)
_PageCount = 1;
return _PageCount;
}
}
protected override bool OnBubbleEvent(object source, EventArgs args)
{
this.NavigationButtonClick(source, args);return base.OnBubbleEvent(source, args);
}
/// <summary>
/// Used by OnMove event
/// </summary>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>protected virtual void OnMoveHandler(EventArgs e)
{
if (Move != null)
{
Move(this, e);
}
}
/// <summary>
/// Enable/disable the nav controls based on the current context, update labels
/// </summary>public void RefreshButtons()
{
// enable/disable the nav controls based on the current context
// we should only show the first button if we're NOT on the first page already
btnFirst.Enabled = (PageNumber != 1);
btnPrev.Enabled = (PageNumber > 1);
btnNext.Enabled = (PageNumber < PageCount);
btnLast.Enabled = (PageNumber != PageCount);
//Update labels
lblPageCount.Text = PageCount.ToString();
lblPageNumber.Text = PageNumber.ToString();
if (PageCount <= 1 && HideOnSinglePage)
{
btnFirst.Visible = false;
btnPrev.Visible =
false;btnNext.Visible = false;
btnLast.Visible =
false;lblof.Visible = false;
lblPageCount.Visible =
false;lblPageNumber.Visible = false;
}
else
{
btnFirst.Visible = true;
btnPrev.Visible =
true;btnNext.Visible = true;
btnLast.Visible =
true;lblof.Visible = true;
lblPageCount.Visible =
true;lblPageNumber.Visible = true;
}
}
/// <summary>
/// Handles the Load event of the Page control.
/// </summary>
/// <param name="sender">The source of the event.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>/*private void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
//this.ConstructPagingNavigationNode();
}
}*/
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "Execution")]protected override void CreateChildControls()
{
this.Controls.Clear();this.ConstructPagingNavigationNode(); base.CreateChildControls();
}
/// <summary>
///
/// Main class managing pages
/// </summary>public void ConstructPagingNavigationNode()
{
//Construct link button controls btnFirst = new LinkButton();
btnFirst.Width =
new Unit("25px");btnFirst.ID = "btnFirst";
btnFirst.Font.Bold =
true;btnFirst.Text = " |< ";
btnFirst.CommandArgument =
"first";btnFirst.Click += new EventHandler(NavigationButtonClick);
btnFirst.EnableViewState =
true;
//this.Controls.Add(btnFirst);
NavigationTopBarNode.Controls.Add(btnFirst);
btnPrev = new LinkButton();
btnPrev.Width =
new Unit("25px");btnPrev.ID = "btnPrev";
btnPrev.Font.Bold =
true;btnPrev.Text = " < ";
btnPrev.CommandArgument =
"prev";btnPrev.Click += new EventHandler(NavigationButtonClick);
btnPrev.EnableViewState =
true;
//this.Controls.Add(btnPrev);
NavigationTopBarNode.Controls.Add(btnPrev);
btnNext = new LinkButton();
btnNext.Width =
new Unit("25px");btnNext.ID = "btnNext";
btnNext.Font.Bold =
true;btnNext.Text = " > ";
btnNext.CommandArgument =
"next";btnNext.Click += new EventHandler(NavigationButtonClick);
btnNext.EnableViewState =
true;
//this.Controls.Add(btnNext);
NavigationTopBarNode.Controls.Add(btnNext);
btnLast = new LinkButton();
btnLast.Width =
new Unit("25px");btnLast.ID = "btnLast";
btnLast.Font.Bold =
true;btnLast.Text = " >| ";
btnLast.CommandArgument =
"last";btnLast.Click += new EventHandler(NavigationButtonClick);
btnLast.EnableViewState =
true;
//this.Controls.Add(btnLast);
NavigationTopBarNode.Controls.Add(btnLast);
//Construct Label ControlslblPageNumber = new Label();
lblPageNumber.EnableViewState =
true;lblPageNumber.ID = "lblPageNumber";
//this.Controls.Add(lblPageNumber);
NavigationTopBarNode.Controls.Add(lblPageNumber);
lblof = new Label();
lblof.EnableViewState =
false;lblof.ID = "lblOf";
lblof.Text =
" / ";
//this.Controls.Add(lblof);
NavigationTopBarNode.Controls.Add(lblof);
lblPageCount = new Label();
lblPageCount.EnableViewState =
true;lblPageCount.ID = "lblPageCount";
//this.Controls.Add(lblPageCount);
NavigationTopBarNode.Controls.Add(lblPageCount);
NavigationTopBarNode.SelectAction = TreeNodeSelectAction.None;
//Set defaultsif (ViewState["PageNumber"] == null)
PageNumber = 1;
/*if (ViewState["RecordCount"] == null)
RecordCount = 1;*/
if (ViewState["HideOnSinglePage"] == null)
HideOnSinglePage =
true;this.Nodes.AddAt(0, NavigationTopBarNode);
//Add handlers
//Load += new EventHandler(Page_Load);
//_pageNumber.TextChanged += new EventHandler(NavigationTbClick);
/*btnFirst.Command += new CommandEventHandler(NavigationButtonClick);
btnPrev.Command += new CommandEventHandler(NavigationButtonClick);
btnNext.Command += new CommandEventHandler(NavigationButtonClick);
btnLast.Command += new CommandEventHandler(NavigationButtonClick);*/
}
protected override void OnInit(EventArgs e)
{
//ConstructPagingNavigationNode();
//this.InitializeControls();this.EnsureChildControls();base.OnInit(e);
}
protected override void EnsureChildControls()
{
base.EnsureChildControls();
}
private void InitializeControls()
{
//Add handlers
//Load += new EventHandler(Page_Load);
//_pageNumber.TextChanged += new EventHandler(NavigationTbClick); /*btnFirst.Click += new EventHandler(NavigationButtonClick);
btnPrev.Click += new EventHandler(NavigationButtonClick);
btnNext.Click += new EventHandler(NavigationButtonClick);
btnLast.Click += new EventHandler(NavigationButtonClick);*/
}
/// <summary>
/// Navigations the button click.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>protected virtual void NavigationButtonClick(object sender, EventArgs e)
{
// get the commandstring arg = ((LinkButton) sender).CommandArgument;
// do the commandswitch (arg)
{
case ("next"):if (PageNumber < PageCount)
PageNumber++;
break;case ("prev"):if (PageNumber > 1)
PageNumber--;
break;case ("last"):
PageNumber = PageCount;
break;case ("first"):
PageNumber = 1;
break;
}
RefreshButtons();
//Raise the event OnMoveOnMoveHandler(new EventArgs());
}
/// <summary>
/// Navigations the tb click.
/// </summary>
/// <param name="sender">The sender.</param>
/// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>private void NavigationTbClick(Object sender, EventArgs e)
{
int _PageNumber = PageNumber;if (_PageNumber > PageCount)
{
PageNumber = PageCount;
}
else if (_PageNumber < 1)
{
PageNumber = 1;
}
else
{
PageNumber = _PageNumber;
}
RefreshButtons();
//Raise the event OnMoveOnMoveHandler(new EventArgs());
}
protected override void OnPreRender(EventArgs e)
{
//bool myControlIsCreated = this.ChildControlsCreated;
// this.EnsureChildControls();
//myControlIsCreated = this.ChildControlsCreated;base.OnPreRender(e);
}
protected override void Render(HtmlTextWriter writer)
{
// Render Navigation Node if enabledbase.Render(writer);
}
/* protected override void RenderContents(HtmlTextWriter writer)
{
if ((this.EnablePaging) && (this.Nodes.Count > 0))
{
this.RefreshButtons();
AdvancedTreeNode myNode = (AdvancedTreeNode)this.Nodes[0];
((AdvancedTreeNode)this.Nodes[0]).Render(writer);
}
if (PageNumber >= 1)
{
int beginNode = (PageNumber - 1) * RecordsPerPage;
int endNode;
if ((beginNode + RecordsPerPage) > RecordCount)
{
endNode = RecordCount;
}
else
{
endNode = (beginNode + RecordsPerPage);
}
for (int i = beginNode; i < endNode; i++)
{
AdvancedTreeNode myNode = (AdvancedTreeNode)this.Nodes[i];
writer.Indent++;
_checkboxIndex = 1;
//BuildItem(myNode, writer);
myNode.Render(writer);
writer.Indent--;
writer.WriteLine();
}
}
//base.RenderContents(writer);
}*/
/*protected override void RenderContents(HtmlTextWriter writer)
{
if (Extender.AdapterEnabled)
{
TreeView treeView = Control as TreeView;
if (treeView != null)
{
writer.Indent++;
_checkboxIndex = 1;
BuildItems(treeView.Nodes, true, true, writer);
writer.Indent--;
writer.WriteLine();
}
}
else
{
base.RenderContents(writer);
}
}*/
protected override object SaveViewState()
{
return new Pair(base.SaveViewState(), null);
}
protected override void LoadViewState(object state)
{
base.LoadViewState(((Pair)state).First);
//this.EnsureChildControls();
}
private void BuildItems(TreeNodeCollection items, bool isRoot, bool isExpanded, HtmlTextWriter writer)
{
if (items.Count > 0)
{
writer.WriteLine();
writer.WriteBeginTag("ul");if (!isExpanded)
{
writer.WriteAttribute("class", "AspNet-TreeView-Hide");
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Indent++;
foreach (TreeNode item in items)
{
BuildItem(item, writer);
}
writer.Indent--;
writer.WriteLine();
writer.WriteEndTag("ul");
}
}
private void BuildItem(TreeNode item, HtmlTextWriter writer)
{
TreeView treeView = this;if ((treeView != null) && (item != null) && (writer != null))
{
writer.WriteLine();
writer.WriteBeginTag("li");
writer.WriteAttribute(
"class", GetNodeClass(item));writer.Write(HtmlTextWriter.TagRightChar);
writer.Indent++;
writer.WriteLine();
if (IsExpandable(item) && treeView.ShowExpandCollapse)
{
WriteNodeExpander(treeView, item, writer);
}
if (IsCheckbox(treeView, item))
{
WriteNodeCheckbox(treeView, item, writer);
}
else if (IsLink(item))
{
WriteNodeLink(treeView, item, writer);
}
else
{
WriteNodePlain(treeView, item, writer);
}
if (HasChildren(item))
{
BuildItems(item.ChildNodes, false, item.Expanded.Equals(true), writer);
}
writer.Indent--;
writer.WriteLine();
writer.WriteEndTag("li");
}
}
private void WriteNodeExpander(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
writer.WriteBeginTag("span");
writer.WriteAttribute(
"class", (item.Expanded.Equals(true) ? "AspNet-TreeView-Collapse" : "AspNet-TreeView-Expand"));if (HasChildren(item))
{
writer.WriteAttribute("onclick", "ExpandCollapse__AspNetTreeView(this)");
}
else
{
writer.WriteAttribute("onclick", Page.ClientScript.GetPostBackEventReference(treeView, "p" + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true));
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(
" ");writer.WriteEndTag("span");
writer.WriteLine();
}
private void WriteNodeImage(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
string imgSrc = GetImageSrc(treeView, item);if (!String.IsNullOrEmpty(imgSrc))
{
writer.WriteBeginTag(
"img");writer.WriteAttribute("src", treeView.ResolveClientUrl(imgSrc));
writer.WriteAttribute(
"alt", !String.IsNullOrEmpty(item.ToolTip) ? item.ToolTip : (!String.IsNullOrEmpty(treeView.ToolTip) ? treeView.ToolTip : item.Text));writer.Write(HtmlTextWriter.SelfClosingTagEnd);
}
}
private void WriteNodeCheckbox(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
writer.WriteBeginTag("input");
writer.WriteAttribute(
"type", "checkbox");writer.WriteAttribute("id", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");
writer.WriteAttribute(
"name", treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox");if (!String.IsNullOrEmpty(treeView.Attributes["OnClientClickedCheckbox"]))
{
writer.WriteAttribute("onclick", treeView.Attributes["OnClientClickedCheckbox"]);
}
if (item.Checked)
{
writer.WriteAttribute("checked", "checked");
}
writer.Write(HtmlTextWriter.SelfClosingTagEnd);if (!String.IsNullOrEmpty(item.Text))
{
writer.WriteLine();
writer.WriteBeginTag("label");
writer.WriteAttribute(
"for", treeView.ClientID + "n" + _checkboxIndex.ToString() + "CheckBox");writer.Write(HtmlTextWriter.TagRightChar);
writer.Write(item.Text);
writer.WriteEndTag("label");
}
_checkboxIndex++;
}
private void WriteNodeLink(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
writer.WriteBeginTag("a");if (!String.IsNullOrEmpty(item.NavigateUrl))
{
writer.WriteAttribute("href", item.NavigateUrl);
}
else
{
string codePrefix = "";if (item.SelectAction == TreeNodeSelectAction.Select)
{
codePrefix = "s";
}
else if (item.SelectAction == TreeNodeSelectAction.SelectExpand)
{
codePrefix = "e";
}
else if (item.PopulateOnDemand)
{
codePrefix = "p";
}
writer.WriteAttribute("href", Page.ClientScript.GetPostBackClientHyperlink(treeView, codePrefix + (Page.Server.HtmlEncode(item.ValuePath)).Replace("/", "\\"), true));
}
//WebControlAdapterExtender.WriteTargetAttribute(writer, item.Target);if (!String.IsNullOrEmpty(item.ToolTip))
{
writer.WriteAttribute("title", item.ToolTip);
}
else if (!String.IsNullOrEmpty(treeView.ToolTip))
{
writer.WriteAttribute("title", treeView.ToolTip);
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Indent++;
writer.WriteLine();
WriteNodeImage(treeView, item, writer);
writer.Write(item.Text);
writer.Indent--;
writer.WriteEndTag("a");
}
private void WriteNodePlain(TreeView treeView, TreeNode item, HtmlTextWriter writer)
{
writer.WriteBeginTag("span");if (IsExpandable(item))
{
writer.WriteAttribute(
"class", "AspNet-TreeView-ClickableNonLink");if (treeView.ShowExpandCollapse)
{
writer.WriteAttribute("onclick", "ExpandCollapse__AspNetTreeView(this.parentNode.getElementsByTagName('span')[0])");
}
}
else
{
writer.WriteAttribute("class", "AspNet-TreeView-NonLink");
}
writer.Write(HtmlTextWriter.TagRightChar);
writer.Indent++;
writer.WriteLine();
WriteNodeImage(treeView, item, writer);
writer.Write(item.Text);
writer.Indent--;
writer.WriteEndTag("span");
}
private void UpdateCheckmarks(TreeNodeCollection items)
{
TreeView treeView = this;if ((treeView != null) && (items != null))
{
foreach (TreeNode item in items)
{
if (((item.ShowCheckBox != null) && (item.ShowCheckBox.Value == true)) ||(treeView.ShowCheckBoxes == TreeNodeTypes.All) ||
((treeView.ShowCheckBoxes ==
TreeNodeTypes.Leaf) && (!IsExpandable(item))) ||((treeView.ShowCheckBoxes == TreeNodeTypes.Parent) && (IsExpandable(item))) ||((treeView.ShowCheckBoxes == TreeNodeTypes.Root) && (item.Depth == 0)))
{
string name = treeView.UniqueID + "n" + _checkboxIndex.ToString() + "CheckBox";bool bIsNowChecked = (Page.Request.Form[name] != null);if (item.Checked != bIsNowChecked)
{
item.Checked = bIsNowChecked;
//Extender.RaiseAdaptedEvent("TreeNodeCheckChanged", new TreeNodeEventArgs(item));
}
_checkboxIndex++;
}
if (HasChildren(item))
{
UpdateCheckmarks(item.ChildNodes);
}
}
}
}
private string GetNodeClass(TreeNode item)
{
string value = "AspNet-TreeView-Leaf";if (item != null)
{
if (item.Depth == 0)
{
if (IsExpandable(item))
{
value = "AspNet-TreeView-Root";
}
else
{
value = "AspNet-TreeView-Root AspNet-TreeView-Leaf";
}
}
else if (IsExpandable(item))
{
value = "AspNet-TreeView-Parent";
}
if (item.Selected)
{
value += " AspNet-TreeView-Selected";
}
else if (IsChildNodeSelected(item))
{
value += " AspNet-TreeView-ChildSelected";
}
else if (IsParentNodeSelected(item))
{
value += " AspNet-TreeView-ParentSelected";
}
}
return value;
}
private string GetImageSrc(TreeView treeView, TreeNode item)
{
string imgSrc = "";if ((treeView != null) && (item != null))
{
imgSrc = item.ImageUrl;
if (imgSrc.Length == 0)
{
if (item.Depth == 0)
{
if ((treeView.RootNodeStyle != null) && (treeView.RootNodeStyle.ImageUrl.Length > 0))
{
imgSrc = treeView.RootNodeStyle.ImageUrl;
}
}
else
{
if (!IsExpandable(item))
{
if ((treeView.LeafNodeStyle != null) && (treeView.LeafNodeStyle.ImageUrl.Length > 0))
{
imgSrc = treeView.LeafNodeStyle.ImageUrl;
}
}
else if ((treeView.ParentNodeStyle != null) && (treeView.ParentNodeStyle.ImageUrl.Length > 0))
{
imgSrc = treeView.ParentNodeStyle.ImageUrl;
}
}
}
if ((imgSrc.Length == 0) && (treeView.LevelStyles != null) && (treeView.LevelStyles.Count > item.Depth))
{
if (treeView.LevelStyles[item.Depth].ImageUrl.Length > 0)
{
imgSrc = treeView.LevelStyles[item.Depth].ImageUrl;
}
}
}
return imgSrc;
}
private bool HasChildren(TreeNode item)
{
return ((item != null) && ((item.ChildNodes != null) && (item.ChildNodes.Count > 0)));
}
private bool IsExpandable(TreeNode item)
{
return (HasChildren(item) || ((item != null) && item.PopulateOnDemand));
}
private void ClearSelectedNode(TreeNodeCollection nodes)
{
if (nodes != null)
{
foreach (TreeNode node in nodes)
{
if (node.Selected)
{
node.Selected = false;
}
if (node.ChildNodes != null)
{
ClearSelectedNode(node.ChildNodes);
}
}
}
}
private bool IsChildNodeSelected(TreeNode item)
{
bool bRet = false;if ((item != null) && (item.ChildNodes != null))
{
bRet = IsChildNodeSelected(item.ChildNodes);
}
return bRet;
}
private bool IsChildNodeSelected(TreeNodeCollection nodes)
{
bool bRet = false;if (nodes != null)
{
foreach (TreeNode node in nodes)
{
if (node.Selected || IsChildNodeSelected(node.ChildNodes))
{
bRet =
true;break;
}
}
}
return bRet;
}
static public void ExpandToDepth(TreeNodeCollection nodes, int expandDepth)
{
if (nodes != null)
{
foreach (TreeNode node in nodes)
{
if (node.Depth < expandDepth)
{
node.Expand();
ExpandToDepth(node.ChildNodes, expandDepth);
}
}
}
}
private bool IsParentNodeSelected(TreeNode item)
{
bool bRet = false;if ((item != null) && (item.Parent != null))
{
if (item.Parent.Selected)
{
bRet = true;
}
else
{
bRet = IsParentNodeSelected(item.Parent);
}
}
return bRet;
}
private void ExpandToSelectedNode()
{
TreeView treeView = this;if ((treeView != null) && (treeView.SelectedNode != null))
{
ExpandToNode(treeView.SelectedNode);
}
}
private void ExpandToNode(TreeNode item)
{
TreeView treeView = this;if ((treeView != null) && (item != null))
{
treeView.CollapseAll();
TreeNode nodeToExpand = item.Parent;while (nodeToExpand != null)
{
nodeToExpand.Expanded = true;
nodeToExpand = nodeToExpand.Parent;
}
}
}
private bool IsLink(TreeNode item)
{
return (item != null) && ((!String.IsNullOrEmpty(item.NavigateUrl)) || (item.SelectAction == TreeNodeSelectAction.Select) || (item.SelectAction == TreeNodeSelectAction.SelectExpand) || (item.PopulateOnDemand && (item.SelectAction != TreeNodeSelectAction.None)));
}
private bool IsCheckbox(TreeView treeView, TreeNode item)
{
bool bItemCheckBoxDisallowed = (item.ShowCheckBox != null) && (item.ShowCheckBox.Value == false);
bool bItemCheckBoxWanted = (item.ShowCheckBox != null) && (item.ShowCheckBox.Value == true);bool bTreeCheckBoxWanted =
(treeView.ShowCheckBoxes ==
TreeNodeTypes.All) ||((treeView.ShowCheckBoxes == TreeNodeTypes.Leaf) && (!IsExpandable(item))) ||
((treeView.ShowCheckBoxes ==
TreeNodeTypes.Parent) && (IsExpandable(item))) ||((treeView.ShowCheckBoxes == TreeNodeTypes.Root) && (item.Depth == 0));return (!bItemCheckBoxDisallowed) && (bItemCheckBoxWanted || bTreeCheckBoxWanted);
}
private string ComposeViewState(TreeNodeCollection nodes, string state)
{
if (nodes != null)
{
foreach (TreeNode node in nodes)
{
if (IsExpandable(node))
{
if (node.Expanded.Equals(true))
{
state += "e";
state = ComposeViewState(node.ChildNodes, state);
}
else
{
state += "n";
}
}
}
}
return state;
}
private string ExpandToState(TreeNodeCollection nodes, string state)
{
if ((nodes != null) && (!String.IsNullOrEmpty(state)))
{
foreach (TreeNode node in nodes)
{
if (IsExpandable(node))
{
bool bExpand = (state[0] == 'e');
state = state.Substring(1);
if (bExpand)
{
node.Expand();
state = ExpandToState(node.ChildNodes, state);
}
}
}
}
return state;
}
/*private void RenderPage()
{
for (int i = 1; i <= RecordsPerPage; i++)
{
//this.Nodes[(RecordCount/RecordsPerPage)*PageNumber].Re
}
}
#endregion
#region IPostBackEventHandler Members
void IPostBackEventHandler.RaisePostBackEvent(string eventArgument)
{
OnMoveHandler(new EventArgs());
}
*/
#endregion
}
}