【怎么构建多级树形结构的下拉列表框】--在线等,马上结帐
例如:
表结构
-----
id(编号) name(名称) parentid(父类ID)
1 一级目录1 0
2 一级目录2 0
3 一级目录3 0
4 二级目录1 1
5 二级目录2 1
6 二级目录3 1
7 二级目录4 2
在下拉列表框里显示的结果如下
------ 对应的values值(id值)
├一级目录1 1
├二级目录1 4
├二级目录2 5
├二级目录3 6
├一级目录2 2
├二级目录4 7
├一级目录3 3
------------------------
最好有源码,有什么好的绑定方法
问题点数:50、回复次数:18Top
1 楼triout(笨牛)回复于 2004-09-04 17:50:20 得分 0
对这个问题,我是先把这些代码进行过滤、排序处理后再绑定的。Top
2 楼chunsky(春天.NET)回复于 2004-09-04 18:04:30 得分 0
有源码吗?Top
3 楼biduan(笔端)回复于 2004-09-04 18:43:29 得分 0
到也没有做过
逛逛Top
4 楼jijl2001(jijl2001)回复于 2004-09-04 18:43:36 得分 0
顶一下Top
5 楼Thristian(来过)回复于 2004-09-04 19:16:57 得分 0
我做过一个,不过是使用树型控件、文本框和一个按钮,按钮和文本框一起做成下拉框的样子,看起来就是一个下拉框,实际上是假的,按钮控制树型控件的显示,其他的就是写树型控件了。Top
6 楼chunsky(春天.NET)回复于 2004-09-04 19:25:23 得分 0
呵呵,不是吧,这样作假有什么意思Top
7 楼cgsun(colin)回复于 2004-09-04 21:56:52 得分 0
在数据库里先排好Top
8 楼chunsky(春天.NET)回复于 2004-09-05 10:46:57 得分 0
数据库里怎么排??Top
9 楼_NET2004(.NET菜鸟)回复于 2004-09-05 12:42:32 得分 0
我也想知道,谁可以实现这样的功能!Top
10 楼waterwood1998(中东singer)回复于 2004-09-05 15:03:16 得分 0
可以利用递归算法来实现!Top
11 楼ar7_top(黑白呸,男生女生呸)回复于 2004-09-06 09:26:06 得分 0
和生成树的原理是一样的呀
只不过你需要判断一下当前的层数
根据层数来判断显示文本的前面需要添加多少个空格Top
12 楼ar7_top(黑白呸,男生女生呸)回复于 2004-09-06 10:25:35 得分 50
/// <summary>
/// 绑定生成一个有树结构的下拉菜单
/// </summary>
/// <param name="dtNodeSets">菜单记录数据所在的表</param>
/// <param name="strParentColumn">表中用于标记父记录的字段</param>
/// <param name="strRootValue">第一层记录的父记录值(通常设计为0或者-1或者Null)用来表示没有父记录</param>
/// <param name="strIndexColumn">索引字段,也就是放在DropDownList的Value里面的字段</param>
/// <param name="strTextColumn">显示文本字段,也就是放在DropDownList的Text里面的字段</param>
/// <param name="drpBind">需要绑定的DropDownList</param>
/// <param name="i">用来控制缩入量的值,请输入-1</param>
private void MakeTree(DataTable dtNodeSets,string strParentColumn,string strRootValue,string strIndexColumn,string strTextColumn,DropDownList drpBind,int i)
{
//每向下一层,多一个缩入单位
i++;
DataView dvNodeSets = new DataView(dtNodeSets);
dvNodeSets.RowFilter = strParentColumn + "=" + strRootValue;
string strPading = ""; //缩入字符
//通过i来控制缩入字符的长度,我这里设定的是一个全角的空格
for(j=0;j<i;j++)
strPading += " ";//如果要增加缩入的长度,改成两个全角的空格就可以了
foreach(DataRowView drv in dvNodeSets)
{
TreeNode tnNode = new TreeNode();
ListItem li = new ListItem(strPading + "├" + drv[strTextColumn].ToString(),drv[strIndexColumn].ToString());
drpBind.Items.Add(li);
MakeTree(dtNodeSets,strParentColumn,drv[strIndexColumn].ToString(),strIndexColumn,strTextColumn,drpBind,i);
}
//递归结束,要回到上一层,所以缩入量减少一个单位
i--;
}
Top
13 楼ar7_top(黑白呸,男生女生呸)回复于 2004-09-06 10:30:57 得分 0
例如你如果要直接调用就可以
你先把所有的记录选出来,存放在一个数据表 dtTemp 里面
然后绑定到一个 drpDirectory
那么你如下调用就可以了
MakeTree(dtTemp ,"parentid","0","id","name",drpDirectory,-1)
有什么问题的话上MSN : williams_qi@msn.com
Top
14 楼_NET2004(.NET菜鸟)回复于 2004-09-06 18:34:03 得分 0
ar7_top(黑白呸,男生女生呸) :
TreeNode tnNode = new TreeNode();
此句显示未定义。
需要加入什么类啊?
Top
15 楼chunsky(春天.NET)回复于 2004-09-06 20:19:15 得分 0
顶一下Top
16 楼ar7_top(黑白呸,男生女生呸)回复于 2004-09-07 10:08:12 得分 0
对不起,一时马虎了,去掉那句话
那个是用来定义树结点的,呵呵呵
这个函数是从我自己写的一个绑定树的函数改过来的
嘻嘻嘻嘻Top
17 楼_NET2004(.NET菜鸟)回复于 2004-09-07 12:33:57 得分 0
搞定啦,谢谢Top
18 楼tjj36(忧郁的眼睛)回复于 2004-11-09 10:19:07 得分 0
mark upTop




