从DataTable加载树形控件
来源:互联网 发布:p2p流媒体直播软件 编辑:程序博客网 时间:2024/05/04 19:38
这个问题。在家可能首先想到递归。关于递归我就不说了。
有一个DataTable 有三列 fnodeid,fparentid,fname分别表示节点编号,父节点编号,显示名称
现在看一下递归代码
public bool buildTree(TreeView TreeViewName, DataTable dt)
{
foreach (DataRow dbRow in dt.Rows)
{
if (dbRow["FparentId"].ToString() == "" )
{
dbRow["FparentId"] = DBNull.Value;
break;
}
}
dt.ChildRelations.Add("myrel", dt.Columns["fnodeid"], dt.Columns["fparentid"]);
foreach (DataRow dbRow in dt.Rows)
{
if (dbRow.IsNull("FparentId"))
{
TreeNode newNode = CreateNode(dbRow);
TreeViewName.Nodes.Add(newNode);
PopulateSubTree(dbRow, newNode);
}
}
return true;
}
private void PopulateSubTree(DataRow dbRow, TreeNode node)
{
foreach (DataRow childRow in dbRow.GetChildRows("myrel"))
{
TreeNode childNode = CreateNode(childRow);
node.Nodes.Add(childNode);
PopulateSubTree(childRow, childNode);
}
}
private TreeNode CreateNode(DataRow rowa)
{
TreeNode node = new TreeNode(rowa["fname"].ToString());
return node;
}
一下子弄了几个方法。。好烦呀。。我的表里有1400行数据用了110多毫秒。我的机器还可以。。
有点慢。我又想了一个。。
public static void FillTree(DataTable dt, TreeView tv, string rootparent, string fp, string fc,string ftext)
{
Dictionary<string, TreeNode> dic = new Dictionary<string, TreeNode>(dt.Rows.Count);
foreach(DataRow row in dt.Rows)
{
TreeNode nod = new TreeNode(row[ftext].ToString()){Tag = row[fp].ToString()};
if (row[fp].ToString() == rootparent )
{
tv.Nodes.Add(nod);
}
dic.Add(row[fc].ToString(), nod);
}
foreach (TreeNode n in dic.Values)
{
if (dic.ContainsKey(n.Tag.ToString()))
{
dic[n.Tag.ToString()].Nodes.Add(n);
}
}
}
利用字典。。只要两个循环就搞定了。时间只用了36毫秒。
一些细节就不加了。
如果哪位有更好方法,不防也分享一下
- 从DataTable加载树形控件
- TreeView 树形控件的加载
- BUI树形控件TreeList的异步加载
- datatable加载
- 前端框架 zTree 从数据库中动态加载树形菜单
- 树形控件
- 树形控件
- 树形控件
- 树形控件
- DataTable 加载表结构
- datatable 异步加载
- Javaweb表格加载---DataTable
- datatable分页动态加载
- datatable 异步加载
- dataTable带参数加载
- DataTable控件的使用
- ListBox控件绑定DataTable
- DataTable 与 datagrid控件
- .net中访问oracle数据库的几种方式
- flex 倒柱状图
- 重载(overload)、覆盖(override)和隐藏(hide)
- java中collection
- Always be
- 从DataTable加载树形控件
- flex 四条线
- 用RUNDLL32.EXE启动一些常用控制
- JVM内存模型以及垃圾回收
- 无限级分类显示树-类
- python 学习 (一) pydev安装
- c#中调用windows api的要点
- 关于ZwQuerySystemInformation
- 当敏捷团队遇上固定价格合同