
三级级联菜单绑定下拉框?ASP.NET
三级菜单同时显示所有的一个下拉框!要求设计一个数据库表.只能一个表!表的设计应该是这样!但不知道如何绑定?用存储过程?递归?idadress父id广东-广州-深圳-福田区...
三级菜单同时显示所有的一个下拉框!
要求设计一个数据库表.只能一个表!
表的设计应该是这样!但不知道如何绑定?
用存储过程?递归?
id adress 父id
广东
-广州
-深圳
-福田区
-罗湖区
广西
-南宁
-青秀区
-东葛区
广东
-广州
-深圳
-福田区
-罗湖区
广西
-南宁
-青秀区
-东葛区
注意:是一个下拉框!而不是AJAX,是当打开页面的时候就显示三级级联菜单而不是点一级显示二级!
那个高手写吧,写出来我就给分!反正思路也差不多这样了.递归.之类的也行.不过太麻烦
你在人才网站看到的地区是不是下拉框? 展开
要求设计一个数据库表.只能一个表!
表的设计应该是这样!但不知道如何绑定?
用存储过程?递归?
id adress 父id
广东
-广州
-深圳
-福田区
-罗湖区
广西
-南宁
-青秀区
-东葛区
广东
-广州
-深圳
-福田区
-罗湖区
广西
-南宁
-青秀区
-东葛区
注意:是一个下拉框!而不是AJAX,是当打开页面的时候就显示三级级联菜单而不是点一级显示二级!
那个高手写吧,写出来我就给分!反正思路也差不多这样了.递归.之类的也行.不过太麻烦
你在人才网站看到的地区是不是下拉框? 展开
5个回答
展开全部
表字段设计假定表名为trees:
id listname fatherid deep
1 广州 0 1
2 深圳 1 2
3 福田区 2 3
4 罗湖区 2 4
解释: fatherid意思是上级菜单 0表示最上层 deep表示项深度 1表示最上层(用0表示最好,这里为了你理解设定1为最上层)
实现想法:
首先把最顶层的(例如广东省,广西省)先读取出来,然后再读取下一级记录(深圳,南宁)按照fatherid将记录插入到上层记录后面顺便加上一个-,依次按照deep深度和fatherid 把相应深度的项插入到上一深度的项后面,这样多少级的列表都可以实现
实现关键 1.确定深度也就是最大deep值
2.把读取出来的记录放在DataSet的表里,所有操作结束后再绑定到DropDownList上;
//我这里没有代码给你,如果你实现不了,写问题补充!!!!!!!我抽时间帮你写出来,你提问的这个问题比较有用,建议你自己实现,往后印象还深!
id listname fatherid deep
1 广州 0 1
2 深圳 1 2
3 福田区 2 3
4 罗湖区 2 4
解释: fatherid意思是上级菜单 0表示最上层 deep表示项深度 1表示最上层(用0表示最好,这里为了你理解设定1为最上层)
实现想法:
首先把最顶层的(例如广东省,广西省)先读取出来,然后再读取下一级记录(深圳,南宁)按照fatherid将记录插入到上层记录后面顺便加上一个-,依次按照deep深度和fatherid 把相应深度的项插入到上一深度的项后面,这样多少级的列表都可以实现
实现关键 1.确定深度也就是最大deep值
2.把读取出来的记录放在DataSet的表里,所有操作结束后再绑定到DropDownList上;
//我这里没有代码给你,如果你实现不了,写问题补充!!!!!!!我抽时间帮你写出来,你提问的这个问题比较有用,建议你自己实现,往后印象还深!
展开全部
SqlConnection conn=new SqlConnection("server=.;database=***;uid=**;pwd=**");
SqlDataAdapter sda=new SqlDataAdapter("select 地区代码,地区名称 from 地区表 order by 地区代码",conn);
DataSet ds=new DataSet();
sda.Fill(ds);
dropDownList1.Items.Clear();
foreach(DataRow dr in ds.Tables[0].Rows)
{
ListItem li=new ListItem();
li.Value=dr["地区代码"].ToString();
li.Text=dr["地区名称"].ToString();
if(li.Text.Length>2)
{
li.Text=" "+li.Text;//缩进两个空格,你可以改成其他的两字符
}
if(li.Text.Length>4)
{
li.Text=" "+li.Text;//缩进两个空格,你可以改成其他的两字符
}
dropDownList1.Items.Add(li);
}
-------------------------------------
我给你个建议,修改表结构为:
地区表(地区代码,地区名称)
01 广东
0101 广州
0102 深圳
010201 福田区
010202 罗湖区
这样,你在查询数据库的时候,只要
select * from 地区表
order by 地区代码 asc
绑定的时候,根据地区代码的字符长度,设置缩进就行了。
这种方法的缺点是修改地区顺序比较麻烦,但如果你的表不经常变动,采取这种方案比较简单。
SqlDataAdapter sda=new SqlDataAdapter("select 地区代码,地区名称 from 地区表 order by 地区代码",conn);
DataSet ds=new DataSet();
sda.Fill(ds);
dropDownList1.Items.Clear();
foreach(DataRow dr in ds.Tables[0].Rows)
{
ListItem li=new ListItem();
li.Value=dr["地区代码"].ToString();
li.Text=dr["地区名称"].ToString();
if(li.Text.Length>2)
{
li.Text=" "+li.Text;//缩进两个空格,你可以改成其他的两字符
}
if(li.Text.Length>4)
{
li.Text=" "+li.Text;//缩进两个空格,你可以改成其他的两字符
}
dropDownList1.Items.Add(li);
}
-------------------------------------
我给你个建议,修改表结构为:
地区表(地区代码,地区名称)
01 广东
0101 广州
0102 深圳
010201 福田区
010202 罗湖区
这样,你在查询数据库的时候,只要
select * from 地区表
order by 地区代码 asc
绑定的时候,根据地区代码的字符长度,设置缩进就行了。
这种方法的缺点是修改地区顺序比较麻烦,但如果你的表不经常变动,采取这种方案比较简单。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
给你粘几行代码 可以参考参考!!
void BindClass()
{
List<Model.Examples> list = BLL.Examples.get_List();
foreach (Model.Examples model in list)
{
ListItem li = new ListItem();
li.Text = "╋" + model.Name;
li.Value = model.ID.ToString();
DropDownList1.Items.Add(li);
BindChild(model.ID.ToString(), "├——");
}
}
void BindChild(string ParentID, string separator)
{
List<Model.Examples> list = BLL.Examples.get_List(ParentID);
foreach (Model.Examples model in list)
{
ListItem li = new ListItem();
li.Text = separator + model.Name;
li.Value = model.ID.ToString();
DropDownList1.Items.Add(li);
string separator_ = separator + "———";
BindChild(model.ID.ToString(), separator_);
}
}
void BindClass()
{
List<Model.Examples> list = BLL.Examples.get_List();
foreach (Model.Examples model in list)
{
ListItem li = new ListItem();
li.Text = "╋" + model.Name;
li.Value = model.ID.ToString();
DropDownList1.Items.Add(li);
BindChild(model.ID.ToString(), "├——");
}
}
void BindChild(string ParentID, string separator)
{
List<Model.Examples> list = BLL.Examples.get_List(ParentID);
foreach (Model.Examples model in list)
{
ListItem li = new ListItem();
li.Text = separator + model.Name;
li.Value = model.ID.ToString();
DropDownList1.Items.Add(li);
string separator_ = separator + "———";
BindChild(model.ID.ToString(), separator_);
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
大哥 这不叫下拉框 看的我直迷糊
这个东西弄一个TreeView就解决了
这个东西弄一个TreeView就解决了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
用三个sqldatasource 绑定到三个dropdownlist 第二个sqldatasource的select-control为第一个dropdownlist值 依次类推
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询