按以下代码扩展的TreeView,无论怎么设置ExpandDepth属性,都是折叠的,那位高手看一下是那的问题?如何解决?我想让其在默认情况下展开所有节点.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
![](/Images/OutliningIndicators/None.gif)
namespace SamWebControlLib
![](/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](/Images/OutliningIndicators/ContractedBlock.gif)
{
[DefaultProperty("Text")]
[ToolboxData("<{0}:PowerTreeView runat=server></{0}:PowerTreeView>")]
public class PowerTreeView : TreeView
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
![](/Images/OutliningIndicators/ContractedSubBlock.gif)
属性#region 属性
private object _DataSource;
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("数据源")]
public override object DataSource
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return _DataSource;
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
_DataSource = value;
}
}
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("节点显示文本所在的字段")]
public string DataTextField
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
String s = (String)ViewState["DataTextField"];
return ((s == null) ? String.Empty : s);
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ViewState["DataTextField"] = value;
}
}
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("节点值所在的字段")]
public string DataValueField
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
String s = (String)ViewState["DataValueField"];
return ((s == null) ? String.Empty : s);
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ViewState["DataValueField"] = value;
}
}
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("上级节点值所在的字段")]
public string ParentIDField
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
String s = (String)ViewState["ParentIDField"];
return ((s == null) ? String.Empty : s);
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ViewState["ParentIDField"] = value;
}
}
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("根节点的值")]
public string RootValue
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
String s = (String)ViewState["RootValue"];
return ((s == null) ? String.Empty : s);
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ViewState["RootValue"] = value;
}
}
[Bindable(true)]
[Category("数据")]
[DefaultValue("")]
[Localizable(true)]
[Description("排序字段名")]
public string SortField
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
get
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
String s = (String)ViewState["SortField"];
return ((s == null) ? String.Empty : s);
}
set
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
ViewState["SortField"] = value;
}
}
#endregion
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary> 绑定
/// </summary>
public void PowerTreeViewDataBind()
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
base.DataBind();
this.Create_Tree(this.DataSource);
}
![](/Images/OutliningIndicators/InBlock.gif)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 构造树
/// </summary>
/// <param name="source"></param>
private void Create_Tree(Object source)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
DataTable dt = null;
if ((source as DataSet) != null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
dt = ((DataSet)source).Tables[0];
}
else if ((source as DataTable) != null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
dt = ((DataTable)source);
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
throw new Exception("只允许绑定DataSet和DataTable");
}
if (dt != null && dt.Rows.Count > 0)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (this.DataTextField == String.Empty) throw new ArgumentNullException("DataTextField属性不能为空!");
if (this.DataValueField == String.Empty) throw new ArgumentNullException("DataValueField属性不能为空!");
if (this.ParentIDField == String.Empty) throw new ArgumentNullException("ParentIDField属性不能为空!");
if (this.RootValue == String.Empty) throw new ArgumentNullException("RootValue属性不能为空!");
this.DataBindTreeView(null, dt, String.Format("{0}='{1}'", this.DataValueField, this.RootValue));
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 增加一级菜单
/// </summary>
/// <param name="CurrentNode"></param>
/// <param name="dt"></param>
/// <param name="sWhere"></param>
private void DataBindTreeView(TreeNode CurrentNode, DataTable dt, string sWhere)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//string Text = "V_MENU_MC", Value = "V_MENU_DM", ToolTip = "V_MENU_EW", Menu_Top = "V_MENU_DM_SJ", NodeImg = "V_MENU_IMAGE", WHERE = "V_WHERE", Sort = "I_SORT", Url = "V_FILE";
DataView dv = new DataView(dt);
dv.RowFilter = sWhere;
dv.Sort = SortField;
//if (CurrentNode != null && CurrentNode.ImageUrl != "images/root.gif")
//{
// if (dv.Count == 0)
// {
// CurrentNode.ImageUrl = "images/last.GIF";
// }
// else
// {
// CurrentNode.ImageUrl = "images/book.gif";
// }
//}
foreach (DataRowView row in dv)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
TreeNode item = new TreeNode();
if (row[this.DataTextField] != DBNull.Value) item.Text = row[this.DataTextField].ToString();
//if (row[ToolTip] != DBNull.Value) item.ToolTip = row[ToolTip].ToString();
string val = row[this.DataValueField].ToString();
if (row[this.DataValueField] != DBNull.Value) item.Value = val;
//if (row[Url] != DBNull.Value) item.NavigateUrl = row[Url].ToString();
//if (row[WHERE] != DBNull.Value) item.NavigateUrl += row[WHERE].ToString();
//item.Target = "main";
![](/Images/OutliningIndicators/InBlock.gif)
if (CurrentNode == null)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
//item.ImageUrl = "images/root.gif";
this.Nodes.Add(item);
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
CurrentNode.ChildNodes.Add(item);
}
![](/Images/OutliningIndicators/InBlock.gif)
string str = String.Format("{0}='{1}'", this.ParentIDField, row[this.DataValueField].ToString());
//item..Style.Font.Name = "楷体_GB2312";
//item.Style.Font.Size = new FontUnit("16px");
//递归
DataBindTreeView(item, dt, str);
}
}
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
/**//// <summary>
/// 获取节点的值
/// </summary>
/// <param name="node"></param>
/// <returns></returns>
public string GetNodeValue(TreeNode node)
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
if (node.Value == "01")
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return "0";
}
else
![](/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
return node.Value;
}
}
}
}
![](/Images/OutliningIndicators/None.gif)
![](/Images/OutliningIndicators/None.gif)
使用item.Expanded = true;方法,只能在控件里面修改属性,以达到展开的显示.我的想法是在控件外面可以方便使用用ExpandDepth属性或ExpandAll方法,操作控件展开折叠.再次请教,有没有办法实现?
另,如果完善了些控件,别忘了通知我.我学习一下代码