我的详细情况是这样的
要做一个文档浏览界面
我用了frameset,左边frame是TreeView表示目录结构,右边frame显示文件夹和文档列表
现在要实现这样的功能:
在右边的frame中进行添加新文件夹的操作
当单击“添加”按钮后,希望在左边的TreeView中实时反映出目录结构的变化,即多出来一个表示新建文件夹的节点
我是这样做的,目录结构记录在xml文件中,TreeView控件根据xml文件生成节点
当单击“添加”按钮后,改写xml文件,然后刷新左边frame的页面,让TreeView重新加载数据
但是这样做TreeView就变成了初始状态,所有节点都是闭合的怎样才能保持原来的节点状态呢
哪位大虾给出个高招。谢谢!!

解决方案 »

  1.   

    我的  可以实现你说的功能  用的是UserControl  供参考   namespace SalesPromotion.UserControl
    {
    using System;
    using System.Data;
    using System.Drawing;
    using System.Web;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using Microsoft.Web.UI.WebControls; /// <summary>
    /// Region 的摘要说明。
    /// </summary>
    public class Region : System.Web.UI.UserControl
    {
    protected Microsoft.Web.UI.WebControls.TreeView TreeView1;
    /// <summary>
    /// 已选择的节点ID。
    /// </summary>
    public string SelectedNodeID
    {
    get
    {
    return this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).ID;
    }
    } /// <summary>
    /// 已选节点的Text。
    /// </summary>
    public string SelectedNodeText
    {
    get
    {
    return this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).Text;
    }
    set
    {
    this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).Text = value;
    }
    } /// <summary>
    /// 获取已选节点的子节点数。
    /// </summary>
    public int SelectedNodeCount
    {
    get
    {
    return this.TreeView1.GetNodeFromIndex(this.TreeView1.SelectedNodeIndex).Nodes.Count;
    }
    } private void Page_Load(object sender, System.EventArgs e)
    {
    if(!this.IsPostBack)
    {
    this.TreeView1.Nodes.Clear();
    PublicDB.ClassPublicDB.ProjectOperate gettree = new PublicDB.ClassPublicDB.ProjectOperate();
    DataTable region = gettree.GetRegion();
    this.GetTree(this.TreeView1.Nodes,"",region);
    }
    } private void GetTree(TreeNodeCollection parentnode, string pcode, DataTable region)
    {
    DataView dvtree = new DataView(region
    , "regionCode like '"+pcode+"*' and len(regionCode)-2="+pcode.Length.ToString(),null,DataViewRowState.CurrentRows);
    foreach(DataRowView myrow in dvtree)
    {
    TreeNode newnode = new TreeNode();
    newnode.ID = myrow[1].ToString();
    newnode.Text = myrow[2].ToString();
    parentnode.Add(newnode);
    if((bool)myrow[0] != true)
    {
    GetTree(newnode.Nodes, myrow[1].ToString(),region);
    }
    }
    } #region Web 窗体设计器生成的代码
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器
    /// 修改此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.Load += new System.EventHandler(this.Page_Load); }
    #endregion
    }
    }
      

  2.   

    TO snowpine999:谢谢你的回复。请问Page_Load里面的
    PublicDB.ClassPublicDB.ProjectOperate gettree = new PublicDB.ClassPublicDB.ProjectOperate();
    是怎么回事?