您的位置:首页 > 其它

TreeView保存当前节点展开状态【Draft Saved】

2012-06-15 14:54 375 查看
前台没有什么而设置,主要代码实现都是在后台。包括加载节点数据,保存当前节点Parent路径状态,设置当前节点展开状态。

Form_Load中:首先获取到保存的state状态,去遍历treeview所有节点,匹配。如果匹配成功,设置该节点Expended属性为true。

【图中Highlight部分,换成递归遍历更好,暂时没有实现。】

protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
BindHowNode();
BindReportNode();
BindDocNode();
BindLinksNode();
}
if (Request.QueryString["state"] != null)
{
string state = Request.QueryString["state"].ToString();
foreach (TreeNode tn in tvAcc.Nodes)
{
if (tn.Text == state)
{
tn.Expanded = true;
}

foreach (TreeNode tn1 in tn.ChildNodes)
{
if (tn1.Text == state)
{
tn1.Expanded = true;
}

foreach (TreeNode tn2 in tn1.ChildNodes)
{
if (tn2.Text == state)
{
tn2.Expanded = true;
}
}
}
}
}
}


后台动态加载TreeView数据:

private void BindHowNode()
{
TreeNode rootHow = new TreeNode("How We Work", "How We Work", "", "#", "");
rootHow.Expanded = false;
tvAcc.Nodes.Add(rootHow);

HowBLL howBLL = new HowBLL();
DataTable dtHow = new DataTable();
dtHow = howBLL.GetItems();

for (int i = 0; i < dtHow.Rows.Count; i++)
{
string itemID = dtHow.Rows[i]["ID"].ToString();
string itemTitle = dtHow.Rows[i]["itemTitle"].ToString();
TreeNode treeDoc = new TreeNode(itemTitle, "HowWeWork.aspx?hid=" + itemID, "", "", "");
rootHow.ChildNodes.Add(treeDoc);
}
}


在SelectedNodeChanged()事件中添加当前状态的值:
(此处用的是TreeNode.Text, 而没用TreeeNode.ValuePath,因为Value值用来页面跳转了,与treeview的路径有一定出入。)

protected void tvAcc_SelectedNodeChanged(object sender, EventArgs e)
{
TreeNode tn = tvAcc.SelectedNode.Parent;

if (Request.QueryString["state"] != null)
{
tn.Expanded = true;
}
string navUrl = tvAcc.SelectedNode.Value.ToString() + "&state=" + tn.Text;
Response.Redirect(navUrl);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐