当前位置:编程学习 > C#/ASP.NET >>

求:三个类别表绑定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 是那来的呀? 能否说明一下....谢了... --------------------编程问答--------------------
引用 11 楼 pconline 的回复:
楼上的兄弟...

List<ModelSheng> lstSheng//省
List<ModelShi> lstShi//市
List<ModelXian> lstXian//县

这三个LIST 是那来的呀? 能否说明一下....谢了...

...........数据库中的数据........ --------------------编程问答-------------------- 那上面这三个列表每一个列表是不是相当独立的查询产生的?

select * from 省

select * from 市

select * from 县

--------------------编程问答-------------------- 采用递规的应该也可以,
1.得到省份的ID, 在市中找出所有有关此ID的信息。
2.循环上面查到的信息,以市Id为条件找出Class3表中所有有关此ID的信息以集合保存。 --------------------编程问答--------------------
引用 11 楼 pconline 的回复:
楼上的兄弟...

List<ModelSheng> lstSheng//省
List<ModelShi> lstShi//市
List<ModelXian> lstXian//县

这三个LIST 是那来的呀? 能否说明一下....谢了...

分别查询省、市、县返回的List集合- -! --------------------编程问答-------------------- 楼上的帅哥,能不能写出代码呀,我也不会,正想学习呢。

谢谢了! --------------------编程问答-------------------- [Quote=引用 13 楼 xing_jy 的回复:]
那上面这三个列表每一个列表是不是相当独立的查询产生的?

select * from 省

select * from 市

select * from 县



楼上的帅哥,能不能写出代码呀,我也不会,正想学习呢。

谢谢了! --------------------编程问答--------------------
引用 13 楼 xing_jy 的回复:
那上面这三个列表每一个列表是不是相当独立的查询产生的?

select * from 省

select * from 市

select * from 县

这个就是获取3个集合的SQL语句- -! --------------------编程问答--------------------
引用 14 楼 jejexu 的回复:
采用递规的应该也可以,
1.得到省份的ID, 在市中找出所有有关此ID的信息。
2.循环上面查到的信息,以市Id为条件找出Class3表中所有有关此ID的信息以集合保存。



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
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,