我页面左边一个TreeView控件,有三点,点一下就在右边绑定DataGrid.
DataGrid上有修改按钮,在修改页面修改完后又返回这个有TreeView的页面,并让TreeView展开到同样位置,DataGrid也重新绑定
说简单点,就是返回再刷新 (我用返回不会刷新,而且修改后有弹出窗口,返回不了了)TreeView能不能像DropDownList一样,设置SelectedValue="xx"啊,这样就可以让他展开到特定位置了还有个TreeView的问题
树左边有展开的有+号,没展开的是-后,右边是名字,我想点+号直接展开树,而不绑定DataGrid,要怎么设.

解决方案 »

  1.   

    没用过 .net 1.1可以用马吗 功能如何
      

  2.   

    1.开启属性,AutoPostBackOnSelect="True",然后就可以刷新页面了
    你说弹出新窗体,那就是你js代码写错了,与空间无关
    后台事件为
    private void TreeView1_NodeSelected(object sender, NickLee.Web.UI.TreeViewNodeEventArgs e)
    {

    }
    2.可以通过ID获取,TreeView tree1=new TreeView();
    TreeView1.FindNodeById(这里你的ID),可以直接找到对应节点
    生成后为一个NickLee.Web.UI.TreeViewNode
    3,直接点+就可以了,文字点击不刷新是
    ExpandNodeOnSelect="False"
      

  3.   

    mail_ricklee(NickLee) :文档再完善些,详细些就好了
      

  4.   

    由于控件太多,asp.net 80个,winform 30个
    文档一直在写,估计可以出几本书了。请各位等待
      

  5.   

    mail_ricklee(NickLee) 大大,感谢您的热情回复.
    1.你可能没听明白我说的.
      TreeView绑定DataGrid这些我都弄好了.
      在修改页面修改后会弹出Java小窗口,点后退退来回去.
    2."展开到特定位置"你能说得详细些吗?
      比如我pageLoad里,传进一个参数ID=34,然后树就展开到ID=34的这个位置,并绑定此位置的DataGrid.(每个位置绑定不同的表)
    3. 我TreeView点+号和点后面名字都一样的效果,会绑定DataGrid,我是想点+号不绑定(刷新无所谓),只有点+号后面的名称才绑定DataGrid.to ld_thinking(懒得想) 1.1可以用,这个控件非常不错,属性太多,没找到中文文档,看得我头很晕
      

  6.   

    using System;
    using System.IO;
    using System.Resources;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;public class TreeViewCtl : System.Windows.Forms.Form 
    { public TreeViewCtl() 
    {
    InitializeComponent(); FilltvwDirectory();
    cbxImageList.SelectedIndex = 1;
    indentUpDown.Value = tvwDirectory.Indent;
    } /// <summary>
    ///    清理正在使用的所有资源
    /// </summary>
    public new void Dispose() 
    {
    base.Dispose();
    components.Dispose();
    } private void AddDirectories(TreeNode node) 
    {
    try 
    {
    DirectoryInfo dir = new DirectoryInfo(GetPathFromNode(node));
    DirectoryInfo[] e = dir.GetDirectories(); for (int i = 0; i < e.Length; i++) 
    {
    string name = e[i].Name;
    if (!name.Equals(".") && !name.Equals("..")) 
    {
    node.Nodes.Add(new TreeNode(name));
    }
    }
    }
    catch (Exception e) 
    {
    MessageBox.Show(e.Message);
    }
    }
    private void AddSubDirectories(TreeNode node) //TreeNode
    {
    for (int i = 0; i < node.Nodes.Count; i++) 
    {
    AddDirectories(node.Nodes[i]);
    } }
    private void tvwDirectory_AfterSelect(object source, TreeViewEventArgs e) 
    {
    Text = " 文件资源管理器 - " + e.Node.Text;
    this.txtIndex.Text=e.Node.Index.ToString(); this.txtText.Text=e.Node.Text.ToString();

    }
    private void tvwDirectory_BeforeExpand(object source, TreeViewCancelEventArgs e) 
    {
    TreeNode nodeExpanding = (TreeNode)e.Node; AddSubDirectories(nodeExpanding);
    } private void FilltvwDirectory() 
    {
    string[] drives = Environment.GetLogicalDrives();
    for (int i = 0; i < drives.Length; i++) 
    {
    TreeNode cRoot = new TreeNode(drives[i]);
    tvwDirectory.Nodes.Add(cRoot);
    AddDirectories(cRoot); }
    }
    private string GetPathFromNode(TreeNode node) 
    {
    if (node.Parent == null) 
    {
    return node.Text;
    }
    return Path.Combine(GetPathFromNode(node.Parent), node.Text);
    }
    private int Refresh_GetExpanded(TreeNode Node, string[] ExpandedNodes, int StartIndex) 
    { if (StartIndex < ExpandedNodes.Length) 
    {
    if (Node.IsExpanded) 
    {
    ExpandedNodes[StartIndex] = Node.Text;
    StartIndex++;
    for (int i = 0; i < Node.Nodes.Count; i++) 
    {
    StartIndex = Refresh_GetExpanded(Node.Nodes[i],
    ExpandedNodes,
    StartIndex);
    }
    }
    return StartIndex;
    }
    return -1;
    }
    private void Refresh_Expand(TreeNode Node, string[] ExpandedNodes) 
    { for (int i = ExpandedNodes.Length - 1; i >= 0; i--) 
    {
    if (ExpandedNodes[i] == Node.Text) 
    { AddSubDirectories((TreeNode) Node);
    Node.Expand(); for (int j = 0; j < Node.Nodes.Count; j++) 
    {
    Refresh_Expand(Node.Nodes[j], ExpandedNodes);
    } return;
    }
    }
    }
    private void Refresh(TreeNode node) 
    { if (node.Nodes.Count > 0) 
    {
    if (node.IsExpanded) 
    { string[] tooBigExpandedNodes = new string[node.GetNodeCount(true)];
    int iExpandedNodes = Refresh_GetExpanded(node,
    tooBigExpandedNodes,
    0);
    string[] expandedNodes = new string[iExpandedNodes];
    Array.Copy(tooBigExpandedNodes, 0, expandedNodes, 0,
    iExpandedNodes); node.Nodes.Clear();
    AddDirectories(node); AddSubDirectories((TreeNode)node);
    node.Expand();

    for (int j = 0; j < node.Nodes.Count ; j++) 
    {
    if (node.Nodes[j].Nodes.Count > 0) 
    {

    Refresh_Expand(node.Nodes[j], expandedNodes);
    }
    }

    else 
    {
    node.Nodes.Clear();
    AddDirectories(node);
    }

    else 
    {
    node.Nodes.Clear();
    AddDirectories(node);
    }
    } private void chkOrder_Click(object source, EventArgs e) 
    {
    this.tvwDirectory.Sorted = chkOrder.Checked;
    for (int i = 0; i < tvwDirectory.Nodes.Count; i++) 
    {
    Refresh(tvwDirectory.Nodes[i]);
    }
    } private void cbxImageList_SelectedIndexChanged(object source, EventArgs e) 
    {
    int index = cbxImageList.SelectedIndex;
    if (index == 0) 
    {
    tvwDirectory.ImageList = null;

    else if (index == 1) 
    {
    tvwDirectory.ImageList = imageList1;

    else 
    {
    tvwDirectory.ImageList = imgList2;
    }
    }
    给你一串代码(完整),像资源管理器一样用TreeView显示文件与文件夹。
      

  7.   

    1.不明白你在说什么
    在修改页面修改后会弹出Java小窗口,点后退退来回去.
    这个是你自己的js 错误,控件如果有问题,请下载1.9.4.6中的版本号为
    2006.1.1231版
    2.
    TreeView1.FindNodeById("34").Selectable=true;
    TreeView1.FindNodeById("34").Expanded=true;3.用nodeselect事件,在事件中绑定DataGrid,不过我奇怪的是
    NickLee.Web.UI中有专门的父子级控件
    NickLee.Web.UI.HierarGrid,你怎么不用中文文档估计没有那么快,因为要做通用版本,中文版本还没有
    如果你要资源管理器的例子,可以参考NickLee.Framework.1.9.4.6.rar
    中的高级效果中的资源管理器例子。
      

  8.   

    谢谢你mail_ricklee(NickLee) 
    我不知道还有NickLee.Web.UI.HierarGrid,呵呵,第一次用,看别人的例子.
    我的TreeView在节点绑定表的ID号,然后再右边的DataGrid显示,
    NickLee.Web.UI.HierarGrid 这个可能显示一个表的内容吗?怎么用法?
    我上班时间不能用QQ啊 :((( 会被K
    只能用MSN
      

  9.   

    插一句,这个问题很简单。
    1.autoPostBack不能设为true.
    2.绑定节点时,设置节点的navigateurl="想要转到的页面?参数";
    3.设置节点的target属性=“这个筐架中用来显示数据的筐架的默认页面”
    比如:
    <frameset cols="185,*">
    <frame src="Left.aspx" frameborder="0" noresize scrolling="no" name="left">
    <frame src="main.aspx" frameborder="0" noresize scrolling="no" name="main">
    </frameset>
    你的树放在left,而你要在点击节点时在main中加载list.aspx,
    那这个时候,每个节点的navigateurl=“list.aspx”
                每个节点的target=“main.aspx”
    OK了,绝对没有问题,完全解决你全部的问题呵呵,不要谢我了
      

  10.   

    晕.楼上的 yiming0755() 
    实在很抱歉,你所说的对我没用,完全不能解决我的全部问题!现在我只想解决一个问题,就是怎么由ID号展开到指定位置
    mail_ricklee(NickLee) 说:
    TreeView1.FindNodeById("34").Selectable=true;
    TreeView1.FindNodeById("34").Expanded=true;
    可以我试几遍都展不开呀.
    我的TreeView是绑定到数据库的,在PageLoad绑定,ID就是数据库的自动编号
    但像Response.Write(TreeView1.FindNodeById("34").Text)都能正确输出.
      

  11.   

    哈哈,我问题解决了,
    mail_ricklee(NickLee) 大大通过远程协助帮我调试好的
    真是非常感谢这个大大
    现在这么牛的又这么热心的人实在是太太太少了.
      

  12.   

    昏倒,我找来mail_ricklee(NickLee) ,楼主竟然一分不给
      

  13.   

    他问的是winform的。你们一直给WEBFORM的答案干吗?真想不通。。