200分求一套完整的无限级分类的程序!
要有数据库文件!还有cs文件!要求绝对开源!要附带注释!要求在删除大类别时相应的小类别也要被删除!最好是存储过程版的!谢谢!~功能一经测试通过就给分!~200分!~我的邮箱是:200831856@qq.com 或者:daichao911@163.com
代码就发在这两个E_Mail里面!~然后在这里回个话!我好给分!~发代码的时候请把你的CSDN的用户名附上!~谢谢!~期待中……
[解决办法]
http://community.csdn.net/IndexPage/SmartQuestion.aspx#noprivate
[解决办法]
其实没有那么严重,这里有个不限级的,无刷新的树,给你参考一下
http://www.cnblogs.com/zm235/archive/2007/06/01/512635.html
[解决办法]
所有大类小类都放在一个表中,后面跟个属于什么大类
[解决办法]
http://community.csdn.net/IndexPage/SmartQuestion.aspx#noprivate
呵呵 顶
[解决办法]
接个分
[解决办法]
就是如
id, names, c_id
1 游戏 0
2 音乐 0
3 网络游戏 1
4 新闻 0
5 传奇世界 3
这样子的结构吗~~ 然后循环读取出数据
不过我感觉 适宜小量数据(5千条以下) 如果在大点的数据 一般不设计成 "无限级 "
个人认为 好的数据库 设计是 避免出现 "无限分类 "的,以前对这个特别 "钟爱 ",但是后来发现数据量大到万级的话,你会头晕的,不利于维护.
[解决办法]
像这样的,一般都要用递归来做,递归的思想比较难写下来,给段代码给你参考一下吧,我写的,用的方法比较笨,路过的高手不要取笑我:D
#region 获取产品类别
/// <summary>
/// 获取用于下拉列表的产品类别
/// 格式:[0]类别名,[1]序号,[2]描述;[3]类别名,[4]序号,[5]描述;……
/// 字符格式未处理
/// </summary>
/// <param name= "pcid "> 父类别序号,为空字符串时表示返回所有的类别 </param>
/// <param name= "list "> 需要构造的数组,可为null值 </param>
/// <returns> </returns>
public ArrayList GetAllProColumnList(string pcid,ArrayList list)
{
StringBuilder sql = new StringBuilder();
sql.Append( "select * from [tbProductColumn] ");//这里这个表名因为是access的数据库,习惯性的加了[],以下同。
if(pcid != " ")
{
sql.Append( " where [ParentPCid]= " + pcid);
}
else
{
sql.Append( " where [ParentPCid]=-1 ");
}
sql.Append( " order by [OrderID] DESC,[PCid] DESC ");
DataSet ds = DbTools.Query(sql.ToString());//你自己写个数据层,基本上就是根据传入的sql语句执行获取DataSet
if(ds.Tables[0].Rows.Count > 0)
{
if(list == null)
{
list = new ArrayList();
}
for(int i = 0; i < ds.Tables[0].Rows.Count; i++)
{
list.Add(ds.Tables[0].Rows[i][ "ClassName "].ToString());
list.Add(ds.Tables[0].Rows[i][ "PCid "].ToString());
list.Add(ds.Tables[0].Rows[i][ "Description "].ToString());
this.GetAllProColumnList(ds.Tables[0].Rows[i][ "PCid "].ToString(),list);//这句就是递归开始了。
}
return list;
}
return null;
}
#endregion
[解决办法]
哦对了,我的数据库设计与你不太一样,我的ParentPCid相当于你的Grade字段,但是我是用数字的类型,只保存这个栏目的父栏目id
[解决办法]
up
[解决办法]
这个我有哇!高级tree.........
[解决办法]
<html>
<head>
<meta http-equiv= "Content-Type " content= "text/html; charset=gb2312 ">
<meta content= "琥珀[hopesoft],http://www.51ajaxcom " name= "author ">
<title> 琥珀网 - javascript无限级联动菜单 </title>
<style type= "text/css ">
body, td
{
font-family: 宋体;
font-size: 12px;
}
</style>
<script language= "javascript ">
function Menu(theform,menuid) {
/*---------------------------------------*\
* 1.变量定义 *
/*---------------------------------------*/
//定义菜单级别MenuClass,菜单长度数组MenuLenArr,
//菜单名称数组MenuArr,下级菜单数组SubMenuArr,菜单ID数组MenuIdArr
var MenuClass,MenuLenArr,MenuArr,SubMenuArr,MenuIdArr
//定义分隔符:splitchar1,splitchar2
var splitchar1,splitchar2
//定义临时数组,子数组,数组长度,
var arr,subarr,arrlen
/*---------------------------------------*\
* 2.变量赋值 *
/*---------------------------------------*/
MenuArr=new Array()
MenuLenArr=new Array()
SubMenuArr=new Array()
MenuIdArr=new Array()
MenuArr[1]= "欧洲|||亚洲|||非洲|||大洋洲|||北美洲|||南美洲 " //洲名|||...
MenuArr[2]= "欧洲###德国|||欧洲###法国|||北美洲###美国|||北美洲###加拿大|||亚洲###中国|||非洲###埃及|||大洋洲###澳大利亚|||南美洲###墨西哥 " //洲名###国名|||...
MenuArr[3]= "中国###北京|||中国###上海|||美国###华盛顿|||美国###纽约|||德国###柏林|||法国###巴黎|||加拿大###多伦多|||埃及###开罗|||澳大利亚###悉尼|||墨西哥###墨西哥城 " //国名###城市名|||...
MenuArr[4]= "北京###朝阳区|||上海###徐汇区|||广州###天河区|||纽约###曼哈顿区|||华盛顿###华盛顿区|||柏林###新柏林区|||巴黎###大巴黎区|||开罗###大开罗|||悉尼###悉尼市区|||墨西哥城###墨西哥城区 " //国名###城市名|||...
MenuIdArr[1]= "zhou "
MenuIdArr[2]= "guo "
MenuIdArr[3]= "shi "
MenuIdArr[4]= "qu "
MenuClass=4 //4级菜单
splitchar1= "||| ";
splitchar2= "### ";
/*---------------------------------------*\
* 3.生成数组 *
/*---------------------------------------*/
for(iii=1;iii <=MenuClass;iii++)
{
arr=MenuArr[iii].split(splitchar1);
len=arr.length;
subarr=new Array()
for (i=0;i <len;i++)
{
subarr[i]=arr[i].split(splitchar2);
}
len=subarr.length;
SubMenuArr[iii]=subarr
MenuLenArr[iii]=len
}
//============更改下级菜单======================
var self,submenu,thislen,thisarr
//self本级菜单
//submenu子菜单
//theform:所在表单对象[type:object]
//menuid:本级菜单级别ID,如1级菜单则为1
self=eval( "document. "+theform.name+ ". "+MenuIdArr[menuid])
submenu=eval( "document. "+theform.name+ ". "+MenuIdArr[menuid+1])
thislen=MenuLenArr[menuid+1]
thisarr=SubMenuArr[menuid+1]
submenu.length=0
submenu.options.add(new Option( "-----请选择----- ", " "));
for (i=0;i <thislen;i++)
{
if (thisarr[i][0] == self.value)
{
submenu.options.add(new Option(thisarr[i][1], thisarr[i][1]));
}
}
submenu.options[0].selected=true
//============更改下级以下菜单==============
var kkk
for(kkk=menuid+2;kkk <=MenuClass;kkk++)
{
submenu=eval( "document. "+theform.name+ ". "+MenuIdArr[kkk])
submenu.length=0
submenu.options.add(new Option( "-----请选择----- ", " "));
submenu.options[0].selected=true
}
}
</script>
<form name= "form1 " method= "post " action= " ">
<table width= "90% " border= "0 " align= "center " cellpadding= "2 " cellspacing= "1 " bgcolor= "#CCCCCC ">
<tr bgcolor= "F1F1F1 ">
<td height= "24 " colspan= "2 " align= "center "> 琥珀无限级联动菜单-JavaScript版 [HPMenu V1.0] </td>
</tr>
<tr bgcolor= "#FFFFFF ">
<td width= "12% " height= "24 " align= "center "> 所 在 洲: </td>
<td> <select name= "zhou " id= "zhou " onChange= "Menu(this.form,1); ">
<option value= " " selected> -----请选择----- </option>
<option value= '欧洲 '> 欧洲 </option>
<option value= '亚洲 '> 亚洲 </option>
<option value= '非洲 '> 非洲 </option>
<option value= '大洋洲 '> 大洋洲 </option>
<option value= '北美洲 '> 北美洲 </option>
<option value= '南美洲 '> 南美洲 </option>
</select> </td>
</tr>
<tr bgcolor= "#FFFFFF ">
<td height= "24 " align= "center "> 国 家: </td>
<td> <select name= "guo " id= "select " onChange= "Menu(this.form,2); ">
<option value= " " selected> -----请选择----- </option>
</select> </td>
</tr>
<tr bgcolor= "#FFFFFF ">
<td height= "24 " align= "center "> 城 市: </td>
<td> <select name= "shi " id= "select2 " onChange= "Menu(this.form,3); ">
<option value= " " selected> -----请选择----- </option>
</select> </td>
</tr>
<tr bgcolor= "#FFFFFF ">
<td height= "24 " align= "center "> 地 区: </td>
<td> <select name= "qu " id= "select3 ">
<option value= " " selected> -----请选择----- </option>
</select> </td>
</tr>
<tr bgcolor= "F1F1F1 ">
<td height= "24 " colspan= "2 " align= "center "> </td>
</tr>
</table>
<table width= "90% " border= "0 " align= "center " cellpadding= "0 " cellspacing= "0 ">
<tr>
<td height= "25 " align= "left "> 下载地址: <a href= "http://www.10090.com/demo/hpmenu/HPMenu.rar " target= "_blank "> 请点击这里 </a> </td>
</tr>
<tr>
<td height= "25 " align= "left "> 在线Demo: <a href= "http://www.10090.com/demo/ " target= "_blank "> 请点击这里 </a> </td>
</tr>
<tr>
<td height= "25 " align= "left "> Bug 反馈: <a href= "http://www.10090.com/bbs/index.asp?boardid=60 " target= "_blank "> 请点击这里 </a> </td>
</tr>
<tr>
<td height= "25 " align= "left "> 联系方式:MSN:hopesoft@msn.com </td>
</tr>
<tr>
<td height= "25 " align= "left "> </td>
</tr>
<tr>
<td height= "50 " align= "center "> copyright(c) 2005 <a href= "http://www.51ajax.com/bbs "> Hopesoft Studio </a> </td>
</tr>
</table>
<script language= "javascript ">
Menu(eval( "document.form1 "),1)
</script>
</form>
</body>
</html>