TREEVIEW采用的是异步加载,别人写的代码,现象有个BUG需要修正,高分求解决方案
C# WINFROM TREEVIEW里面的部分代码
public partial class FrmCodeFile : Form
{
Codefile _codeFile;
public FrmCodeFile()
{
InitializeComponent();
tsmiAdd.Click += new EventHandler(tsbNew_Click);
tsmiModify.Click += new EventHandler(tsbEdit_Click);
tsmiDel.Click += new EventHandler(tsbDel_Click);
BindTreeList();
}
/// <summary>
/// 树信息绑定
/// </summary>
void BindTreeList()
{
dicTree.Nodes.Clear();
var firNode = new TreeNode("代码档案", 0, 0) { Name = "0" };
firNode.ExpandAll();
var codeFileList = CodeFileBLL.Query("AND PARENTID=0");
codeFileList.ForEach(r =>
{
var secNode = new TreeNode(string.Format("{0} {1}", r.Diccode, r.Dicname), 1, 1) { Tag = r, Name = r.Dicid.ToString() };
secNode.Nodes.Add("...");
firNode.Nodes.Add(secNode);
});
//RecursiveLoopNodes(_codeFileList, firNode);
dicTree.Nodes.Add(firNode);
}
/// <summary>
/// 递归循环调用
/// </summary>
/// <param name="firList">一级树集合</param>
/// <param name="parentNode">上级节点</param>
void RecursiveLoopNodes(List<Codefile> firList, TreeNode parentNode)
{
firList.ForEach(r =>
{
var secNode = new TreeNode(
string.Format("{0} {1}", r.Diccode, r.Dicname), 1, 1) { Tag = r, Name = r.Dicid.ToString() };
if (r.Diccode.Length < 3 )
secNode.Nodes.Add("...");
parentNode.Nodes.Add(secNode);
});
}
/// <summary>
/// 刷新树
/// </summary>
/// <param name="selectedNode">选择节点</param>
/// <param name="isLoad">是否是加载</param>
void RefreshTree(TreeNode selectedNode, bool isLoad = false)
{
if (selectedNode.LastNode != null && selectedNode.LastNode.Text != "..." && !isLoad) return;
var currList = CodeFileBLL.Query(string.Format(" AND PARENTID={0}", Normal.ParseInt(selectedNode.Name)));
selectedNode.Nodes.Clear();
RecursiveLoopNodes(currList, selectedNode);
}
得出的结果是所有的类前面都有个+号,实际上有些小类下面已经没用商品了的
我用鼠标点一下其中一个没有下级分类的09型钢,+号就消失了。。。。
我想实现的效果是有下级分类的就有+号,没用下级分类的就不要出现+号了~~~ --------------------编程问答-------------------- 如果你想每次点开一个节点的时候在获取此节点的子项就会这样,
如果想解决这个一个有两个方案:
1、一次遍历到底
2、每次获取节点子项的时候遍历到子项的子项; --------------------编程问答-------------------- 我想选择第二个方案怎么改代码?
比如我选了B代工品,它就会把代工品下面所有的子项都遍历一遍
麻烦帮改下代码,我不是编程人员,不是太懂~~~ --------------------编程问答-------------------- 油腻的师姐在哪里? --------------------编程问答--------------------
在 void RecursiveLoopNodes(List<Codefile> firList, TreeNode parentNode) 函数的parentNode.Nodes.Add(secNode); 下面添加以下代码试试看:
RefreshTree(secNode, true)
ps:通常都不采用第二个方案,因为load时间太长 --------------------编程问答-------------------- sqlchen 用你的方法可行,但是数据不多还好说,有些数据多的,直接卡死。。。 --------------------编程问答-------------------- 油腻的师姐~~
补充:.NET技术 , C#