问题一
对treeview不熟悉,使用的是一次传一级的生成方法生成4级treeview树的笨办法,也就是页面一load就把所有树枝给装进去了。可是“树大招风”啊,客户端打开很慢(总树枝大概是7000)
我想让我点到第三级的时候才发生selectedchange事件读出4级树枝
但我选其他3级或2级树枝时自动将4级树枝的数据清掉装入新的数据
小弟刚接触treeview控件,一时也找不到相关资料,请CSDN各方神圣指点迷津....问题二
如何点文字不点+-号就可以将树打开关闭?

解决方案 »

  1.   

    你想点到第三级的时候才发生SelectedIndexChange事件,我觉得是有点难度的,等高人了
      

  2.   

    gsk99(ZJUT) 
    mytree.SelectExpands=true;
    点击文字打开树已解决,谢谢还有问题一高手请帮忙看看
      

  3.   

    --我想让我点到第三级的时候才发生selectedchange事件读出4级树枝
    这个想法是一个不错的想法
    提点思路,不过怎样只要是希望在selectedchange这个时间中实现一定的操作,那么autopostback就必须设置为true,否则是不能实现的
    你可以在selectedchange事件中进行判断,如果是到了第3级,那么进行第4级的装载操作
      

  4.   

    另外送给你一段在autopostback=true的时候,防止刷新的参考代码public void apt()
    {
    string  strTreeName  =  "TreeView1";  
    string  strRef  =  Page.GetPostBackEventReference(TreeView1);  
    string  strScript  =  "<script  language=\"JavaScript\">  \n"  +  
    "<!--  \n"  + 
    "            function  initTreeView()  {  \n"  +
    "                        "  +  strTreeName  +  
    ".onSelectedIndexChange  =  function()  {  \n"  +    
    "if  (event.oldTreeNodeIndex  !=event.newTreeNodeIndex){  \n"  +  
    "this.queueEvent('onselectedindexchange',  event.oldTreeNodeIndex  +  ','  +  event.newTreeNodeIndex);  \n"  +  
    "if (selectnode()==1 && '"  +  strRef.Replace("'","\\'")    +  "'!=null) \n"  +
                    "window.setTimeout('"  +  strRef.Replace("'","\\'")    +  "',  0,  'JavaScript');  \n"  +   
    "  } } \n"  +      
                    " }  \n"  +    "function selectnode()  \n"  + 
    "{                                         \n"  + 
    " var node=TreeView1.clickedNodeIndex;   \n"  +  " if(IndexDemo(node)!=-1)   \n"  + 
    " return(1);            \n"  + 
    " else                      \n"  + 
    " return(-1);           \n"  + 
      
    "}                             \n"  + 
                    " function IndexDemo(str1)              \n"  + 
                    " {                                     \n"  + 
                    " var str2=\".\";                     \n"  + 
                    " var s = str1.indexOf(str2);       \n"  + 
                    " return(s);                        \n"  +                 " }                                     \n"  + 
    "    function killErrors() {                   \n"  +
    " return true;                                \n"  +
    " }                                            \n"  +
    " window.onerror = killErrors;                  \n"  +
                     "//  -->  \n"  +                   "</script>";  
    Page.RegisterClientScriptBlock("InitTree",strScript  );   }
      

  5.   

    谢谢fphuang(人在哈尔滨) 你可以在selectedchange事件中进行判断,如果是到了第3级,那么进行第4级的装载操
    --------------------------------
    treeview中我只知道一个取得当前选中节点的名称:
    this.treeSpec.GetNodeFromIndex(this.treeSpec.SelectedNodeIndex).Text;
    如何才能判断到到到了第四级?
    另外我的第四级的数据必须是根据123级数决定的
      

  6.   

    --如何才能判断到到到了第四级?
    这个比较容易
    在SelectedIndexChange事件中
    Microsoft.Web.UI.WebControls.TreeNode  NewNode=TreeView1.GetNodeFromIndex(TreeView1.SelectedNodeIndex);  
    string[] slip=NewNode.GetNodeIndex().Split('.');
    int i=slip.GetLength(0);
    看看i是多少^_^
    另:只有你想做,想什么办法都可以做到地
      

  7.   

    判断节点已ok
    还差怎么取得上级节点的node id
    fphuang请赐教
      

  8.   

    node .Parent得到父节点的对象..至于id嘛..在这个对象里找吧
      

  9.   

    我每级的treenode都有绑上上级类的类名称和类ID:public class sysSpec_Tree : System.Web.UI.Page
    {
    protected Microsoft.Web.UI.WebControls.TreeView treeSpec;
    SqlClass sc=new SqlClass();

    private void Page_Losys(object sender, System.EventArgs e)
    {
    if(!IsPostBack)
    {
    CreateRoot();
    }

    // 在此处放置用户代码以初始化页面
    } private void CreateRoot()
    {
    sc.Open();
    SqlDataResyser dr;
    dr=sc.GetDataResyser("select * from sys_nsof");
    TreeNode RootNode=new TreeNode();
    RootNode.Text="价目表";
    treeSpec.Nodes.sysd(RootNode);
    while(dr.Resys())
    {
    TreeNode tn=new TreeNode();
    tn.Text=dr["nsofName"].ToString();
    tn.ID=dr["nsofID"].ToString();
    RootNode.Nodes.sysd(tn);
    RootNode.Expanded=true;
    nsofChildNode(dr["nsofID"].ToString(),tn);
    }
    sc.Close();
    }
    private void nsofChildNode(string nsofid,TreeNode nsof)
    {
    sc.Open();
    SqlDataResyser dr=sc.GetDataResyser("select * from sys_Category");
    while(dr.Resys())
    {
    TreeNode category = new TreeNode();
    category.Text=dr["sysCategoryName"].ToString();
    category.ID=dr["sysCategoryID"].ToString();
    nsof.Nodes.sysd(category);
    CategoryChild(nsofid,dr["sysCategoryID"].ToString(),category);
    }
    sc.Close();

    }
    private void CategoryChild(string nsofid,string CategoryID,TreeNode category)
    {
    if(CategoryID=="1" && nsofid=="1")
    {
    sc.Open();
    SqlDataResyser dr=sc.GetDataResyser("select SpecCategoryName,nsofid from sys_SpecCategory where nsofid='1'order by SpecCategoryName");
    while(dr.Resys())
    {
    TreeNode spec = new TreeNode();
    spec.Text=dr["SpecCategoryName"].ToString();
    spec.ID=dr["SpecCategoryName"].ToString();
    category.Nodes.sysd(spec);
    //CategoryChild(nsofid,dr["sysCategoryID"].ToString(),tn);
    }
    sc.Close();
    }
    }
    private void treeSpec_SelectedChange(object sender,Microsoft.Web.UI.WebControls.TreeViewSelectEventArgs e)
    {
    string nodeValue = this.treeSpec.GetNodeFromIndex(this.treeSpec.SelectedNodeIndex).Text;
    // string nnValue=this.treeSpec.GetNodeFromIndex(this.treeSpec.SelectedNodeIndex).Parent.ToString();
    // Response.Write(nodeValue.ToString()+"<br>"+nnValue);
    TreeNode tn=treeSpec.GetNodeFromIndex(this.treeSpec.SelectedNodeIndex);
    string[] slip=tn.GetNodeIndex().Split('.');
    int nodelevel=slip.GetLength(0);
    for(int i=0;i<nodelevel;i++)
    {
    Response.Write(slip[i].ToString());
    }
    } #region Web Form Designer generated code
    override protected void OnInit(EventArgs e)
    {
    //
    // CODEGEN:该调用是 ASP.NET Web 窗体设计器所必需的。
    //
    InitializeComponent();
    base.OnInit(e);
    }

    /// <summary>
    /// 设计器支持所需的方法 - 不要使用代码编辑器修改
    /// 此方法的内容。
    /// </summary>
    private void InitializeComponent()
    {
    this.treeSpec.SelectedIndexChange += new Microsoft.Web.UI.WebControls.SelectEventHandler(this.treeSpec_SelectedChange);
    this.Losys += new System.EventHandler(this.Page_Losys); }