求:三个类别表绑定TREEVIEW 方法..
我这里不是存在一个表中(无限级),而是存在三个表中,省,市,县(客户需求)表class1(省)
class1_id int
class1_name String
表class2 (市)
class2_id int
class1_id int
class2_name string
表class3(县)
class3_id int
class1_id int
class2_id int
class3_name string
现在要把数据绑到Treeview中来实现3级树
如果把所有数据放到一个表中(无限级),网上已有方法,大家就不要提供了.我现在想求教三个表中怎么实现.谢谢
最好是代码...
查询到网上有说.三个表生成一张视图变成一个表来实现.但是没有找到方法.
对SQL SERVER 视图不太了解.希望高手帮忙.... --------------------编程问答-------------------- 比一个表简单得多了.
循环添加,不同级别,就找不同表中数据. --------------------编程问答-------------------- 你根本就不会编程序,凑程序有意思么? --------------------编程问答-------------------- 两个 foreach --------------------编程问答-------------------- --------------------编程问答-------------------- 首先读取所有省,foreach根据省的ID获取城市,在foreach根据城市ID获取县! --------------------编程问答--------------------
使用三表连接,或用视图,视图是一张虚拟表,你可以查一下,建立视图的方法及用法,很容易的。 --------------------编程问答-------------------- select a.class3_id,a.class1_id,a.class2_id,class3_name,a.class1_name from calss3 a left join class1 b on a.class1_id=b.class1_id left join class2 c on c.class2_id=a.class2_id
--------------------编程问答-------------------- 我要具体代码.谢谢大家......
对数据库不太熟悉....TREEVIEW 也是第一次使用...谢谢....
具体的实现过程 --------------------编程问答-------------------- --------------------编程问答--------------------
--------------------编程问答-------------------- 楼上的兄弟...
List<ModelSheng> lstSheng//省
List<ModelShi> lstShi//市
List<ModelXian> lstXian//县
private void MakeTreeSheng(TreeView tv, List<ModelSheng> lstSheng, List<ModelShi> lstShi, List<ModelXian> lstXian)
{
for (int i = 0; i < lstSheng.Count; i++)
{
TreeNode tn = new TreeNode();
tn.Tag = lstSheng[i].ID.ToString();
tn.Text = lstSheng[i].Name;
treeView1.Nodes.Add(tn);
List<ModelShi> lstShiFind = lstShi.FindAll(
delegate(ModelShi ms)
{
return ms.IDSheng == lstSheng[i].ID;
});
MakeTreeShi(tn, lstShiFind, lstXian);
}
}
private void MakeTreeShi(TreeNode tn, List<ModelShi> lstShiFind, List<ModelXian> lstXian)
{
for (int i = 0; i < lstShiFind.Count; i++)
{
TreeNode tnShi = new TreeNode();
tnShi.Tag = lstShiFind[i].ID.ToString() + "," + lstShiFind[i].IDSheng.ToString();
tnShi.Text = lstShiFind[i].Name;
tn.Nodes.Add(tnShi);
List<ModelXian> lstXianFind = lstXian.FindAll(
delegate(ModelXian mx)
{
return mx.IDSheng == lstShiFind[i].IDSheng && mx.IDShi == lstShiFind[i].ID;
});
MakeTreeXian(tnShi, lstXianFind);
}
}
private void MakeTreeXian(TreeNode tnShi, List<ModelXian> lstXianFind)
{
for (int i = 0; i < lstXianFind.Count; i++)
{
TreeNode tnXian = new TreeNode();
tnXian.Tag = lstXianFind[i].ID.ToString() + "," + lstXianFind[i].IDShi.ToString() + "," + lstXianFind[i].IDSheng.ToString();
tnXian.Text = lstXianFind[i].Name;
tnShi.Nodes.Add(tnXian);
}
}
List<ModelSheng> lstSheng//省
List<ModelShi> lstShi//市
List<ModelXian> lstXian//县
这三个LIST 是那来的呀? 能否说明一下....谢了... --------------------编程问答--------------------
...........数据库中的数据........ --------------------编程问答-------------------- 那上面这三个列表每一个列表是不是相当独立的查询产生的?
select * from 省
select * from 市
select * from 县
--------------------编程问答-------------------- 采用递规的应该也可以,
1.得到省份的ID, 在市中找出所有有关此ID的信息。
2.循环上面查到的信息,以市Id为条件找出Class3表中所有有关此ID的信息以集合保存。 --------------------编程问答--------------------
分别查询省、市、县返回的List集合- -! --------------------编程问答-------------------- 楼上的帅哥,能不能写出代码呀,我也不会,正想学习呢。
谢谢了! --------------------编程问答-------------------- [Quote=引用 13 楼 xing_jy 的回复:]
那上面这三个列表每一个列表是不是相当独立的查询产生的?
select * from 省
select * from 市
select * from 县
楼上的帅哥,能不能写出代码呀,我也不会,正想学习呢。
谢谢了! --------------------编程问答--------------------
这个就是获取3个集合的SQL语句- -! --------------------编程问答--------------------
jejexu 嗨,你好,能不能写出代码来,我也学习一下。谢谢了。 --------------------编程问答-------------------- 用10楼的方法
List<ModelSheng> lstSheng//省
List<ModelShi> lstShi//市
List<ModelXian> lstXian//县
这3个
首先建立三个实体类 ModelSheng、ModelShi、ModelXian
然后select * from table(分别3个表) 返回3个不同的数据源
DataTable
List<ModelSheng> lt=new List<ModelSheng>();
for(int i=0;i<dt.Rows.Count;i++)
{
ModelSheng MS=new ModelSheng();
MS.省ID=dt.Rows[i]["SID"];
MS.省Name=dt.Rows[i]["Name"];
lt.Add(MS);
}
最终会得到一个以ModelSheng 为实体的链表形式
一次类推 然后传入到10楼的方法即可。 --------------------编程问答-------------------- 首先读取所有省,foreach根据省的ID获取城市,在foreach根据城市ID获取县! --------------------编程问答-------------------- 还有更好的方法吗? --------------------编程问答--------------------
public partial class WebForm1 : System.Web.UI.Page
{
LightSpeedContext<LightSpeedModel1UnitOfWork> context = new LightSpeedContext<LightSpeedModel1UnitOfWork>("RetailSqlServer2005");
protected void Page_Load(object sender, EventArgs e)
{
//得到所有的省
List<Class1> listClass1 = GetAllClass1();
//循环所有的省
for (int i = 0; i < listClass1.Count(); i++)
{
//创建一个树结点
TreeNode node1 = new TreeNode(listClass1[i].Class1Name, listClass1[i].Id.ToString());
//通过省Id得到所有市的信息
List<Class2> listClass2 = GetAllClass2(listClass1[i].Id);
//循环所有的市
for (int j = 0; j < listClass2.Count(); j++)
{
//创建一个市的结点
TreeNode node2 = new TreeNode(listClass2[j].Class2Name, listClass2[j].Id.ToString());
//将市结点作为省结点的子结点
node1.ChildNodes.Add(node2);
//根据市Id得到所有的县ID
List<Class3> listClass3 = GetAllClass3(listClass2[i].Id);
//循环所有的县
for (int k = 0; k < listClass3.Count(); k++)
{
TreeNode node3 = new TreeNode(listClass3[k].Class3Name, listClass3[k].Id.ToString());
//将县结点添加到市结点下
node2.ChildNodes.Add(node3);
}
}
//将省结点添加到TreeView中
TreeView1.Nodes.Add(node1);
}
}
//查询出所有的省
public List<Class1> GetAllClass1()
{
using (var con = context.CreateUnitOfWork())
{
var list = con.Class1s.Select(p => p);
return list.ToList<Class1>();
}
}
//通过省Id得到所有市的信息
public List<Class2> GetAllClass2(int id)
{
using (var con = context.CreateUnitOfWork())
{
var list = con.Class2s.Where(p=>p.Class1Id==id);
return list.ToList<Class2>();
}
}
//通过市Id得到所有县的信息
public List<Class3> GetAllClass3(int id)
{
using (var con = context.CreateUnitOfWork())
{
var list = con.Class3s.Where(p => p.Class2Id == id);
return list.ToList<Class3>();
}
}
}
这是一些思路供参考,用的技术不同你那里应该运行不了。
补充:.NET技术 , ASP.NET