C# Winform 动态创建treeview实现.
假如我有一个关系表如下a->bc->bd->ae->bf->cg->dh->d现在这些数据保存在一个数组里面.现在数组可能会变不是固定的.要动态创建一个TreeView....
假如我有一个关系表如下
a->b c->b d->a e->b f->c g->d h->d
现在这些数据保存在一个数组里面.现在数组可能会变不是固定的.要动态创建一个TreeView.目前实现了,但是效率很低,尤其当数组的个数很大时.效率实在是不堪入目.请教有没有高手解决这个问题.
我的实现伪代如下:
数组中存的是data={a,b,c,d,e,f,g,h}.
专门有个函数来获取他的指向值如:get(a)=b;
int i;
TreeNode[] td=new TreeNode[data.Count];
TreeNode RootNode = new TreeNode(data[0].ToString());
td[0] = RootNode;
this.treeView1.Nodes.Add(RootNode);
for ( i = 1; i < this.data.Count; i++)
{
TreeNode SubNode = new TreeNode(data[i].ToString());
td[i] = SubNode;
}
for (i = 0; i < this.data.Count; i++)
{
string name = td[i].Text.ToString();
for (int k = 0; k < this.data.Count; k++)
{
string man=get(td[k].Text.ToString());
if (man.Equals(name))
{
td[i].Nodes.Add(td[k]);
}
}
}
那位高手解决效率问题,有好的算法加分
头节点错了 改成 b->a 就可以理解了.
就是后面2层for循环太没效率了 当数组个数大于50后都很慢了. 展开
a->b c->b d->a e->b f->c g->d h->d
现在这些数据保存在一个数组里面.现在数组可能会变不是固定的.要动态创建一个TreeView.目前实现了,但是效率很低,尤其当数组的个数很大时.效率实在是不堪入目.请教有没有高手解决这个问题.
我的实现伪代如下:
数组中存的是data={a,b,c,d,e,f,g,h}.
专门有个函数来获取他的指向值如:get(a)=b;
int i;
TreeNode[] td=new TreeNode[data.Count];
TreeNode RootNode = new TreeNode(data[0].ToString());
td[0] = RootNode;
this.treeView1.Nodes.Add(RootNode);
for ( i = 1; i < this.data.Count; i++)
{
TreeNode SubNode = new TreeNode(data[i].ToString());
td[i] = SubNode;
}
for (i = 0; i < this.data.Count; i++)
{
string name = td[i].Text.ToString();
for (int k = 0; k < this.data.Count; k++)
{
string man=get(td[k].Text.ToString());
if (man.Equals(name))
{
td[i].Nodes.Add(td[k]);
}
}
}
那位高手解决效率问题,有好的算法加分
头节点错了 改成 b->a 就可以理解了.
就是后面2层for循环太没效率了 当数组个数大于50后都很慢了. 展开
3个回答
展开全部
/// </summary>
/// <param name="dataTable">从数据库中读取数据</param>
/// <param name="TreeNodes">TREE对象</param>
/// <param name="parentId">节点</param>
private void BindTreeView(DataTable dataTable, TreeNodeCollection TreeNodes, string parentId)
{
DataView dataView = new DataView(dataTable);
TreeNode node;
dataView.RowFilter = "Menu_parent=" + "'" + parentId + "'";//数据分流
foreach (DataRowView dataRowView in dataView)
{
node = new TreeNode();
node.Text = dataRowView["Menu_name"].ToString();//添加节点的名称
node.NavigateUrl=dataRowView["Menu_url"].ToString();//获取节点的URL地址
TreeNodes.Add(node);
BindTreeView(dataTable, node.ChildNodes, dataRowView["menu_Id"].ToString());//递归添加
}
}
希望能帮你,循环解决当然慢了,这个是递归问题
/// <param name="dataTable">从数据库中读取数据</param>
/// <param name="TreeNodes">TREE对象</param>
/// <param name="parentId">节点</param>
private void BindTreeView(DataTable dataTable, TreeNodeCollection TreeNodes, string parentId)
{
DataView dataView = new DataView(dataTable);
TreeNode node;
dataView.RowFilter = "Menu_parent=" + "'" + parentId + "'";//数据分流
foreach (DataRowView dataRowView in dataView)
{
node = new TreeNode();
node.Text = dataRowView["Menu_name"].ToString();//添加节点的名称
node.NavigateUrl=dataRowView["Menu_url"].ToString();//获取节点的URL地址
TreeNodes.Add(node);
BindTreeView(dataTable, node.ChildNodes, dataRowView["menu_Id"].ToString());//递归添加
}
}
希望能帮你,循环解决当然慢了,这个是递归问题
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询