我用的是ASp三层框架能的!我不会能! 没有能过!我刚刚毕业不久!看谁能帮我能能不!我会感激你们滴!有3个表一个 Province省份表 City 城市表 还有一个Area 区表 我想能个树形菜单 怎么能啊!!
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
...
10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -------------------------------------------------- ----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
... Id Title (合作的公司) Address (公司的网址) ProId cid AId
1 上海画质家有限公司 www.ok123.com 1 3 4
.......
如果用上面这个当成创建Tree 怎么创建的 后台可以添加修改删除的 后台写好了!那个Tree怎么显示的! 三级树形菜单 怎么能啊!别嫌我的很少!我就这么多了!以后有了补给你们! +安徽省
-合肥市
-合肥东区
+上海
-上海市
-普陀区
-黄埔区
+北京
-北京市
-长安区
如果打开安徽显示安徽全部的合作公司 如果点击合肥 就显示安徽合肥的合作公司
就像这个样子的!有会的吗?
我用的是ASp三层框架能的!我不会能! 没有能过!我刚刚毕业不久!谢谢你们啦
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
...
10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -------------------------------------------------- ----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
... Id Title (合作的公司) Address (公司的网址) ProId cid AId
1 上海画质家有限公司 www.ok123.com 1 3 4
.......
如果用上面这个当成创建Tree 怎么创建的 后台可以添加修改删除的 后台写好了!那个Tree怎么显示的! 三级树形菜单 怎么能啊!别嫌我的很少!我就这么多了!以后有了补给你们! +安徽省
-合肥市
-合肥东区
+上海
-上海市
-普陀区
-黄埔区
+北京
-北京市
-长安区
如果打开安徽显示安徽全部的合作公司 如果点击合肥 就显示安徽合肥的合作公司
就像这个样子的!有会的吗?
我用的是ASp三层框架能的!我不会能! 没有能过!我刚刚毕业不久!谢谢你们啦
简单点,一个类别一个表
比如,province:id,name
City:id,provinceId,name
不过后台代码要多一些,这个应该常用到,了解一下也好。create table City
(
CityId int primary key auto_increment,
City varchar(30) not null,
ParentId int not null,
Layer varchar(9) not null,
Re varchar(255) null
);treeview可以用递归算法加载,网上都有代码,
用三个表也是可以的,不过扩展性不好。
ASp三层框架 Bll DaL Models 表示层
Tree显示在前台的啊!后台才用下拉列表的!
asp.net写的!不是Asp !就是查询出来 循环绑定Tree都行!我不会绑定!
先查出所有的省,保存在DataSet中。然后调用下边的方法
/// <summary>
/// 创建DataSet的方法
/// </summary>
/// <param name="nodes">TreeView的根节点</param>
/// <param name="ds">Dataset数据集合</param>
/// <param name="pid">节点的父</param>
private void CreateTreeView(TreeNodeCollection nodes, DataSet ds, int pid)
{
//定义筛选条件
string sql = string.Format("ParentID={0}", pid); //从Dataset中筛选符合条件的行的集合,筛选之后的这些行就是你要显示的数据
DataRow[] drr = ds.Tables[0].Select(sql); //遍历获得行的集合
foreach (DataRow dr in drr)
{
//创建TreeView节点
TreeNode tnode = new TreeNode();
//添加到根节点中
nodes.Add(tnode);
//设置显示的文本
tnode.Text = dr["PurName"].ToString();
tnode.Value = dr["PurID"].ToString();
//这是作为调用下面的方法的参数。
DataSet ds=new DataSet ();
ds=查询出所有的市的数据;
//递归调用方法,显示下一级
CreateTreeView(tnode.ChildNodes, ds, Convert.ToInt32(dr["PurID"]));
//从Dataset中删除已经添加的行,提高访问效率
ds.Tables[0].Rows.Remove(dr); }
}
先把所有数据都读出来到一个datatable里面
for(循环datatable)
{
if(是省名称)
{
response.write(输出省名称...)...
for(循环datatable)
{
if(是市名称)
{
response.write(输出市名称...)...
for(循环datatable)
{
if(是区名称)
{
response.write(输出区名称...)...
}
}
}
}
}
}
发的不符合嘛! 根据我那4个表 显示Tree的显示!我不会啊!
{
response.write("<div>" + 省.name + "</div>");
for(循环市datatable)
{
if(市.PId == 省.pid)
{
response.write("<div>--"+ 市.name + "</div>");
for(循环区datatable)
{
if(区.cid == 市.cid)
response.write("<div>----" + 区.name + "</div>");
}
}
}
}
下拉菜单我会!不般来说都是后台 哪有前台用下拉列表的!老板叫用Tree实现!www.art-home.com.cn\work.aspx 你进入看看点击一下看看!那是我以前做的 现在老板说把城市和区也给我现实出来!
然后把读出来的数据生成成这种格式:
<ul id="example">
<li><span>A 1</span>
<ul>
<li><span>A 1.1</span>
<ul>
<li><span>A 1.1.1</span></li>
<li><span>A 1.1.2</span></li>
</ul>
</li>
</ul>
</li>
</ul>
最后用这个http://docs.jquery.com/Plugins/Treeview,让它树形显示在网页里,还可以收缩。顺带疑问照片是你的吗?很漂亮啊!有前途
{
private string _ID;
private string _Name;
private string _PID;
public string ID
{
get { return _ID; }
set { _ID = value; }
}
public string Name
{
get { return _Name; }
set { _Name = value; }
}
public string PID
{
get { return _PID; }
set { _PID = value; }
}
}//自己定义的类
static List<Model1> l = new List<Model1>();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
for (int i = 0; i < 5; i++)
{
Model1 m = new Model1();
m.ID = i.ToString();
m.Name = i.ToString();
m.PID = "-1";
l.Add(m);
}
for (int i = 0; i < 8; i++)
{
Model1 m = new Model1();
m.ID = (i + 5).ToString();
m.Name = i.ToString() + i.ToString();
if (i < 5)
{
m.PID = i.ToString();
}
else
{
m.PID = "5";
}
l.Add(m);
}//往list里加数据,你应该是sql查询
BuildItemTree(TreeView1);
}
}
public const string ROOT_ID = "000";//定义根节点
public void BuildItemTree( TreeView ItemTreeView)
{
TreeNode tn = new TreeNode();
tn.Value = ROOT_ID;
tn.Text = "所有项目";
this.LoadItemTree(ROOT_ID, tn);
ItemTreeView.Nodes.Clear();
ItemTreeView.ExpandDepth = 1;
ItemTreeView.Nodes.Add(tn);
}
public void LoadItemTree(string itemid, TreeNode node)
{
List<Model1> lst = new List<Model1>();
if (itemid != "000")
{
lst = l.FindAll(
delegate(Model1 m)
{
return m.PID == itemid;
});
}
else
{
lst = l.FindAll(delegate(Model1 m) { return m.PID == "-1"; });
}//找每个节点的父节点,你应该是用findCitybypid(string pid)这个方法
lst.Sort(delegate(Model1 ioi1, Model1 ioi2)
{
return ioi1.ID.CompareTo(ioi2.ID);
});//按节点排序,你的是按排序号排序
foreach (Model1 o in lst)
{
TreeNode n = new TreeNode();
n.Text = o.Name;
n.Value = o.ID;
node.ChildNodes.Add(n);
LoadItemTree(o.ID, n);
}
}
前台怎么就没有用下拉菜单的
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
...
10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
4.合作伙伴表 Collabate
Id Title (合作的公司) Address(公司的网址) ProId(省份Id) cid(城市Id) AId(区的Id)
1 上海画质家有限公司 www.ok123.com 1 3 4
发错了!4个表
有4个表一个 Province省份表 City 城市表 还有一个Area 区表 我想能个树形菜单 怎么能啊!!
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
...
10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -------------------------------------------------- ----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
怎么看都是3个表...
你闲麻烦,就直接把这3还是4个表的数据弄一个list里,反正字段都一样,用我那方法把 public void LoadItemTree(string itemid, TreeNode node)
{
List<Model1> lst = new List<Model1>();
if (itemid != "000")
{
lst = l.FindAll(
delegate(Model1 m)
{
return m.PID == itemid;
});
}
else
{
lst = l.FindAll(delegate(Model1 m) { return m.PID == "-1"; });//改成从省级表查询
}
lst.Sort(delegate(Model1 ioi1, Model1 ioi2)
{
return ioi1.ID.CompareTo(ioi2.ID);
});//按节点排序,你的是按排序号排序
foreach (Model1 o in lst)
{
TreeNode n = new TreeNode();
n.Text = o.Name;
n.Value = o.ID;
node.ChildNodes.Add(n);
LoadItemTree(o.ID, n);
}
}
{
lst = l.FindAll(
delegate(Model1 m)
{
return m.PID == itemid;
});//改成从市级表查询
}
Province省份表PId Name ShenNo(排序号) Area(分级省份)
----------- -------------------------------------------------- ----------- -----------
1 安徽 23 2
2 北京 2 2
...
10 2
City 城市表
CId Name ShiNo PId
----------- -------------------------------------------------- ----------- -----------
1 合肥市 9 1
2 芜湖市 1 1
...
Area 区表
AId AName QuNo CId
----------- -----------
1 东城区 1 3
2 西城区 2 3
3 崇文区 3 3
4 宣武区 4 3
5 朝阳区 5 3
6 丰台区 6 3
4.合作伙伴表 Collabate
Id Title (合作的公司) Address(公司的网址) ProId(省份Id) cid(城市Id) AId(区的Id)
1 上海画质家有限公司 www.ok123.com 1 3 4
明显是TreeView和数据库查出来的数据怎么绑定的问题~~
一定要用TreeView么?个人感觉直接查出数据用html拼出来不就省事多了。
public void tree()
{
const string ROOT_ID = "000";
TreeNode tn = new TreeNode();
tn.Value = ROOT_ID;
tn.Text = "所有项目";
List<M1> l1 = new List<M1>();//取所有省级
List<M2> l2 = new List<M2>();//取所有市级
List<M3> l3 = new List<M3>();//区级
foreach (M1 m1 in l1)
{
TreeNode n1 = new TreeNode();
n1.Text = m1.ItemName;
n1.Value = m1.ItemID;
tn.ChildNodes.Add(n1);
foreach (M2 m2 in l2)
{
if (m2.pid == m1.id)
{
TreeNode n2 = new TreeNode();
n2.Text = m1.ItemName;
n2.Value = m1.ItemID;
n1.ChildNodes.Add(n2);
foreach (M3 m3 in l3)
{
if (m3.pid == m2.id)
{
TreeNode n3 = new TreeNode();
n3.Text = m1.ItemName;
n3.Value = m1.ItemID;
n2.ChildNodes.Add(n3);
}
}
}
}
}
}这么弄会很烦人不解释了
(
CityId int primary key auto_increment,
City varchar(30) not null,
ParentId int not null,
Layer varchar(9) not null,
Re varchar(255) null
);
2.给你一个绑定到DropDownList的代码。/// <summary>
/// 页面加载
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
protected void Page_Load(object sender, EventArgs e)
{
//加载页面时,动态读取国家列表到DropList
CreateTree();
}
/// <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 (int 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--;
}
/// <summary>
/// SQL语句查询,再绑定到DropList里面
/// </summary>
private void CreateTree()
{
//查询ZoneList
string sql = "SELECT *FROM Zone";
DataTable dt= DataAccess.GetDataSet(sql);
MakeTree(dt, "parentid", "0", "zone_id", "zonename_en", zone_id, -1);
}
3.给你看下上面代码的效果
ID,name,type,top_ID
1,山东,省,0
5,济南,市,1