强人来指点一下NickLee.Web.UI.TreeView这个树形控件.

xiaoqhuang 2006-06-16 02:33:13
我页面左边一个TreeView控件,有三点,点一下就在右边绑定DataGrid.
DataGrid上有修改按钮,在修改页面修改完后又返回这个有TreeView的页面,并让TreeView展开到同样位置,DataGrid也重新绑定
说简单点,就是返回再刷新 (我用返回不会刷新,而且修改后有弹出窗口,返回不了了)

TreeView能不能像DropDownList一样,设置SelectedValue="xx"啊,这样就可以让他展开到特定位置了

还有个TreeView的问题
树左边有展开的有+号,没展开的是-后,右边是名字,我想点+号直接展开树,而不绑定DataGrid,要怎么设.
...全文
326 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
takingjiang 2006-11-09
  • 打赏
  • 举报
回复
他问的是winform的。你们一直给WEBFORM的答案干吗?真想不通。。
shalen520 2006-06-16
  • 打赏
  • 举报
回复
昏倒,我找来mail_ricklee(NickLee) ,楼主竟然一分不给
xiaoqhuang 2006-06-16
  • 打赏
  • 举报
回复
哈哈,我问题解决了,
mail_ricklee(NickLee) 大大通过远程协助帮我调试好的
真是非常感谢这个大大
现在这么牛的又这么热心的人实在是太太太少了.
xiaoqhuang 2006-06-16
  • 打赏
  • 举报
回复
晕.楼上的 yiming0755()
实在很抱歉,你所说的对我没用,完全不能解决我的全部问题!

现在我只想解决一个问题,就是怎么由ID号展开到指定位置
mail_ricklee(NickLee) 说:
TreeView1.FindNodeById("34").Selectable=true;
TreeView1.FindNodeById("34").Expanded=true;
可以我试几遍都展不开呀.
我的TreeView是绑定到数据库的,在PageLoad绑定,ID就是数据库的自动编号
但像Response.Write(TreeView1.FindNodeById("34").Text)都能正确输出.
yiming0755 2006-06-16
  • 打赏
  • 举报
回复
插一句,这个问题很简单。
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了,绝对没有问题,完全解决你全部的问题。。。呵呵,不要谢我了。。。
xiaoqhuang 2006-06-16
  • 打赏
  • 举报
回复
谢谢你mail_ricklee(NickLee)
我不知道还有NickLee.Web.UI.HierarGrid,呵呵,第一次用,看别人的例子.
我的TreeView在节点绑定表的ID号,然后再右边的DataGrid显示,
NickLee.Web.UI.HierarGrid 这个可能显示一个表的内容吗?怎么用法?


我上班时间不能用QQ啊 :((( 会被K
只能用MSN
mail_ricklee 2006-06-16
  • 打赏
  • 举报
回复
如果还有问题直接联系我
qq:16503096
mail_ricklee 2006-06-16
  • 打赏
  • 举报
回复
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
中的高级效果中的资源管理器例子。
hwmok 2006-06-16
  • 打赏
  • 举报
回复
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显示文件与文件夹。
xiaoqhuang 2006-06-16
  • 打赏
  • 举报
回复
mail_ricklee(NickLee) 大大,感谢您的热情回复.
1.你可能没听明白我说的.
TreeView绑定DataGrid这些我都弄好了.
在修改页面修改后会弹出Java小窗口,点后退退来回去.
2."展开到特定位置"你能说得详细些吗?
比如我pageLoad里,传进一个参数ID=34,然后树就展开到ID=34的这个位置,并绑定此位置的DataGrid.(每个位置绑定不同的表)
3. 我TreeView点+号和点后面名字都一样的效果,会绑定DataGrid,我是想点+号不绑定(刷新无所谓),只有点+号后面的名称才绑定DataGrid.

to ld_thinking(懒得想) 1.1可以用,这个控件非常不错,属性太多,没找到中文文档,看得我头很晕
mail_ricklee 2006-06-16
  • 打赏
  • 举报
回复
由于控件太多,asp.net 80个,winform 30个
文档一直在写,估计可以出几本书了。

请各位等待
shalen520 2006-06-16
  • 打赏
  • 举报
回复
mail_ricklee(NickLee) :文档再完善些,详细些就好了
mail_ricklee 2006-06-16
  • 打赏
  • 举报
回复
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"
ld_thinking 2006-06-16
  • 打赏
  • 举报
回复
没用过 .net 1.1可以用马吗 功能如何
shalen520 2006-06-16
  • 打赏
  • 举报
回复
呵呵,我找作者来帮你看看

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧