我虽然不知道你怎么弄的!但大概意思我懂了!
我给点意见:第一你数据库设计有问题 -------推荐
如果类下面还有小类就分开设置
把class主键设成ID 然后在做一个表加一个外键连接到class中的主键不就行了第2个方法是很傻的。
另外一个就是查询语句可以做到。
你先select id from class where name="a%" 然后把第一条数据做为大类放在一起。
我给点意见:第一你数据库设计有问题 -------推荐
如果类下面还有小类就分开设置
把class主键设成ID 然后在做一个表加一个外键连接到class中的主键不就行了第2个方法是很傻的。
另外一个就是查询语句可以做到。
你先select id from class where name="a%" 然后把第一条数据做为大类放在一起。
id name bid sort
1 a 0 1
2 b 0 2
3 a1 1 1-3
4 a11 3 1-3-4
5 b1 2 2-5
算法是全数据循环,规则:
a)当bid=0时,sort设置为id号
b)当bid指向的父记录sort有值的时候,当前记录的sort设置为 父记录的sort + “-” + id ,否则跳过不做。
c)重复做,直到所有的记录的sort都有值为止。
d)避免无限循环,加个最大循环次数,到达最大循环次数时退出循环。
当然不使用存储过程也可以,用dataset也能实现这个算法。这个算法的循环次数受树深度的影响,深度越少,速度越快。沿用现有做法的: 动态生成<option 的字符串, 算法是:先生成根节点的option, 然后递归生成子节点的option,
最后拼接整个字符串,写到<select>标签里。
select name+'('+
(case bid when 0 then '大类' else (select name+'下面的分类' from class b where b.id=a.bid) end)
+')' from class a
<select id=select1>
<option value=""> 请选择类别 </option>
<option value=""> a</option>
<option value=""> b</option>
</select>在.net中怎么实现呢,我知道SQL语句怎么写,我想请教的是这里的
<option value=""> 请选择类别 </option>
该怎么加进去呢?
在.net下面有一个DropDownList控件,能很好的把数据列表进去,请看<form id="form1" runat="server">
<asp:DropDownList ID="DropDownList1" runat="server" DataSourceID="SqlDataSource1" DataTextField="name" DataValueField="id">
</asp:DropDownList><asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="Data Source=(local);Initial Catalog=d_base;Persist Security Info=True;User ID=sa;Password=sa"
ProviderName="System.Data.SqlClient" SelectCommand="SELECT [id], [name] FROM [Class]WHERE [BID]=0">
</asp:SqlDataSource>
</form>这样可以读出所有分类的列表,但我遇到的问题是,我该怎么把上面的一个项目,“请选择类别”并给它赋值为0,显示在这个DropDownList中呢?请指导下,谢谢
DataSet ds = ....;DataRow dr = ds.Tables[0].NewRow();
dr["Text"] = "请选择类别";
dr["Value"] = "0";ds.Tables[0].Rows.InsertAt(dr, 0);DropDownList1.DataSource = ds.Table[0];
DropDownList1.DataTextField = "Text";
DropDownList1.DataValueField = "Id";
DropDownList1.DataBind();