组织和遍历TreeView里面的数据
2007-09-18 13:58
225 查看
关键字:asp.net2.0,treeview,数据,遍历
经常有朋友问如何把数据添加进TreeView,其实更多的是要问为什么treeview不能绑定数据库里面的数据,而只能绑定xml的数据.
这个问题要从数据的结构来阐述,TreeView的数据结构是树状的,而表里的数据是平面的,平面的数据结构表达树状的结构就有很多种方法,所以笔者认为这也就是为什么微软没有提供直接的数据表绑定方法而是把这个空间留给了用户.
下面简单描述如何把简单的数据库里的数据遍历到TreeView中.
首先假定有如下的数据表,结构有:id主键,nodetext节点文本,fathernode父节点id.其中fathernode这个字段默认值是0,代表是根节点,如果是非0的话那么就说明是主键为这个值的子节点,结构就是这么简单,当然在数据表中实现树形结构的存储还有很多,这里只讨论如上的情况.
数据表定义如下图:
为了测试往里面写几条数据:
这里为了简便,假定树只有两层.在这种情况下用两个for 循环就可以实现了,当然也可以用递归,不过为了简单说明问题,这里只用循环的方式来做.
外层循环读取所有FatherNode为0的节点,里面套用的循环是读取当前节点的子节点.代码大致如下:
private void GenerateTreeView()
{
DataSet1TableAdapters.test_tableTableAdapter ta1 = new DataSet1TableAdapters.test_tableTableAdapter();
DataTable dt1 = ta1.GetDataByFatherNode(0);
for (int i = 0; i < dt1.Rows.Count; i++)
{
TreeNode tn1 = new TreeNode();
tn1.Text = dt1.Rows[i]["NodeText"].ToString();
DataSet1TableAdapters.test_tableTableAdapter ta2 = new DataSet1TableAdapters.test_tableTableAdapter();
int currentid=int.Parse(dt1.Rows[i]["id"].ToString());
DataTable dt2 = ta2.GetDataByFatherNode(currentid);
for (int j = 0; j < dt2.Rows.Count; j++)
{
TreeNode tn2 = new TreeNode();
tn2.Text = dt2.Rows[j]["NodeText"].ToString();
tn1.ChildNodes.Add(tn2);
}
TreeView1.Nodes.Add(tn1);
}
}
其中的是读取数据用的,用的是数据集进行的操作.关于数据集的定义请下载本文附带的源码,很简单的,同样,通过数据集的方式来访问数据也很方便.
比较复杂的情况,需要用到递归,比如读取文件目录信息.可以参考我的这篇文章.
附:参考代码下载.数据库在App_Data中,请附加到SqlServer2005里.
经常有朋友问如何把数据添加进TreeView,其实更多的是要问为什么treeview不能绑定数据库里面的数据,而只能绑定xml的数据.
这个问题要从数据的结构来阐述,TreeView的数据结构是树状的,而表里的数据是平面的,平面的数据结构表达树状的结构就有很多种方法,所以笔者认为这也就是为什么微软没有提供直接的数据表绑定方法而是把这个空间留给了用户.
下面简单描述如何把简单的数据库里的数据遍历到TreeView中.
首先假定有如下的数据表,结构有:id主键,nodetext节点文本,fathernode父节点id.其中fathernode这个字段默认值是0,代表是根节点,如果是非0的话那么就说明是主键为这个值的子节点,结构就是这么简单,当然在数据表中实现树形结构的存储还有很多,这里只讨论如上的情况.
数据表定义如下图:
为了测试往里面写几条数据:
这里为了简便,假定树只有两层.在这种情况下用两个for 循环就可以实现了,当然也可以用递归,不过为了简单说明问题,这里只用循环的方式来做.
外层循环读取所有FatherNode为0的节点,里面套用的循环是读取当前节点的子节点.代码大致如下:
private void GenerateTreeView()
{
DataSet1TableAdapters.test_tableTableAdapter ta1 = new DataSet1TableAdapters.test_tableTableAdapter();
DataTable dt1 = ta1.GetDataByFatherNode(0);
for (int i = 0; i < dt1.Rows.Count; i++)
{
TreeNode tn1 = new TreeNode();
tn1.Text = dt1.Rows[i]["NodeText"].ToString();
DataSet1TableAdapters.test_tableTableAdapter ta2 = new DataSet1TableAdapters.test_tableTableAdapter();
int currentid=int.Parse(dt1.Rows[i]["id"].ToString());
DataTable dt2 = ta2.GetDataByFatherNode(currentid);
for (int j = 0; j < dt2.Rows.Count; j++)
{
TreeNode tn2 = new TreeNode();
tn2.Text = dt2.Rows[j]["NodeText"].ToString();
tn1.ChildNodes.Add(tn2);
}
TreeView1.Nodes.Add(tn1);
}
}
其中的是读取数据用的,用的是数据集进行的操作.关于数据集的定义请下载本文附带的源码,很简单的,同样,通过数据集的方式来访问数据也很方便.
比较复杂的情况,需要用到递归,比如读取文件目录信息.可以参考我的这篇文章.
附:参考代码下载.数据库在App_Data中,请附加到SqlServer2005里.
相关文章推荐
- 组织和遍历TreeView里面的数据 http://www.cnblogs.com/aspnetx/archive/2007/09/18/897083.html
- List<Map<String, String>>遍历相同数据合并(map里面某个key相同则合并数据)
- 20.购物车商品价格的总和(里面有一些功能没有实现,创建textview布局对象,然后for()遍历数据求和)
- 将数据库里面的数据遍历出来显示在jsp页面
- js如何向数组里面添加数据和遍历出来数组里面的内容
- Treeview用于显示按照树形结构进行组织的数据
- TreeView的数据绑定和遍历
- 将数据遍历插入到List集合里面的实体类中
- winform里的treeview能够跟数据绑定吗?我不知道。里面有treeview的用法。是转来的
- 遍历list往list里面增加数据
- C语言-数据结构-线索二叉树-生成、遍历源代码
- C++数据结构之 --二叉树简单实现和4种遍历
- 数据结构之图(存储结构、遍历)
- JS 循环遍历JSON数据
- 一种加载TreeView数据的新写法
- 使用jquery中的ajax方法事,组织数据的思路
- 大端存储 小端存储 (终极版本Byte Endian是指字节在内存中的组织,所以也称它为Byte Ordering,或Byte Order。 对于数据中跨越多个字节的对象, 我们必须为它建)
- rs.next()为false导致resultset遍历不出数据
- javascript 层级数据的递归遍历与节点插入
- hibernate查询表的几个字段遍历数据