省市数据递归加载到TreeView

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace 省市数据递归加载到TreeView
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            ////1.把所有的省份及直辖市加载到TreeView的根节点上。
            //List<Area> listProvince = GetSubItemByParentId(0);
            //foreach (Area item in listProvince)
            //{
            //    treeView1.Nodes.Add(item.AreaName);
            //}

            //递归将省市加载到TreeView中
            LoadDataToTree(treeView1.Nodes, 0);
        }
        //递归加载到TreeView
        private void LoadDataToTree(TreeNodeCollection treeNodeCollection, int pid)
        {
            //1.根据指定的pid获取该城市下的子城市
            List<Area> listCity = GetSubItemByParentId(pid);

            //2.遍历将获取到的数据绑定到treeNodeCollection节点集合中
            foreach (var item in listCity)
            {
                //返回刚刚增加的这个节点
                TreeNode node = treeNodeCollection.Add(item.AreaName);
                LoadDataToTree(node.Nodes, item.Areaid);
            }
        }

        //先封装一个方法,根据父Id查询下面的所有子项
        private List<Area> GetSubItemByParentId(int pid)
        {
            List<Area> list = new List<Area>();
            string sql = "select * from TblArea where [email protected]";
            using (SqlDataReader reader = SqlHelper.ExecuteReader(sql, new SqlParameter("@pid", pid)))
            {
                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        Area model = new Area();
                        model.Areaid = reader.GetInt32(0);
                        model.AreaName = reader.GetString(1);
                        model.AreaPid = reader.GetInt32(2);
                        list.Add(model);

                        /////不要直接在这里递归,一定要先把数据获取到一个集合中,然后再递归
                        /////否则会打开很多个连接。
                    }
                }
            }

            return list;
        }
    }
    public class Area
    {
        public int Areaid { get; set; }
        public string AreaName { get; set; }
        public int AreaPid { get; set; }
    }
}
时间: 2024-08-02 19:10:28

省市数据递归加载到TreeView的相关文章

b/s和C/S方法用C#递归方法把数据表加载到treeview控件中

先看一下数据库的结构: 表结构如下所示: Num                   Name                                 fatherNum       BZ 01                      总节点                                      0              ...... 0101                   第一个一级节点                          01      

递归加载目录

public void LoadTree(string path, TreeNode node = null) { string[] dirs = Directory.GetDirectories(path); foreach (var dir in dirs) { TreeNode node1 = new TreeNode(Path.GetFileName(dir)); if (node == null) { //首次加载在treeview控件上 treeView1.Nodes.Add(nod

JS实现-页面数据无限加载

在手机端浏览网页时,经常使用一个功能,当我们浏览京东或者淘宝时,页面滑动到底部,我们看到数据自动加载到列表.之前并不知道这些功能是怎么实现的,于是自己在PC浏览器上模拟实现这样的功能.先看看浏览效果: 当滚动条滚动到页面底部时,提示“正在加载…”. 当页面已经加载了所有数据后,滚动到页面底部会提示“数据已加载到底了”: 实现数据无限加载的过程大致如下: 1.滚动条滚动到页面底部. 2.触发ajax加载,把请求返回的数据加载到列表后面. 如何判断滚动条是否滚动到页面底部?我们可以设置一个规则:当滚

ArcGIS Engine中数据的加载 (转)

1.加载Shapefile数据 1 IWorkspaceFactory pWorkspaceFactory; 2 IFeatureWorkspace pFeatureWorkspace; 3 IFeatureLayer pFeatureLayer; 4 5 //获取当前路径和文件名 6 OpenFileDialog dlg = new OpenFileDialog(); 7 dlg.Filter = "Shape(*.shp)|*.shp|All Files(*.*)|*.*"; 8

C# IO操作(五)文件的递归加载

本篇是一个案例,其核心通过代码展示代码中的递归这个用法,程序的界面如下: 当点击“加载”按钮时,根据路径中的地址,加载该文件夹下所有的子文件夹和子文件,代码如下: 1 private void BtnLoad_Click(object sender, EventArgs e) 2 { 3 string sPath = txtPath.Text.Trim(); 4 LoadDirAndFile(sPath, tvList.Nodes); 5 } 6 7 private void LoadDirAn

WinForm ListView虚拟模式加载数据 提高加载速度

将VirtualMode 属性设置为 true 会将 ListView 置于虚拟模式.控件不再使用Collection.Add()这种方式来添加数据,取而代之的是使用RetrieveVirtualItem(Occurs when the ListView is in virtual mode and requires a ListViewItem.)和CacheVirtualItems两个事件,单独使用RetrieveVirtualItem也可以,CacheVirtualItems这个事件主要是

smartjs - DataManager 场景示例分析 - 数据懒加载

发一张policy的参数图设置图: 场景1 - 数据的懒加载/延迟加载 在很多时候,为了提高网页的加载速度,减少不必要的开销,会将页面的数据拆分成几个部分,首先加载呈现可视区域内的数据,然后剩下来的会在需要的时候在进行加载. 而这种按需加载的数据又分为两种: 1.按照需要进行加载:可以是由某个动作触发来引起,比如:tab,查看更多等: 2.采用缓存的方式:对后续动作的预知,提前将后续的数据加载进来,放入到缓存中:等需要的时候能提供快速的响应:比如:很多igrid的滚动分页 那么来看一下在data

安卓中实现界面数据懒加载

大家在使用手机新闻客户端的时候就会有一个发现,大多数的新闻客户端都会把新闻分类,诸如头条.娱乐.体育.科技等等,如何实现这种界面的呢?这个实现起来其实很简单,就是在一个Fragment中实现多个ViewPage的切换,再在ViewPage的上面放一个TabLayout,关联起来就可以实现联动效果.如果大家感觉不太明了的话,以后我可以专门写一篇关于Fragment中放入多个ViewPage的博客,今天,我主要介绍的是怎样实现界面即Fragment的懒加载.那么,大家就会奇怪了既然是加载界面直接加载

GreenPlum 使用gpload通过gpfdist文件实现数据高速加载

1,gpload环境准备 环境准备请参考博主以前的文章gpfdist部署实战:http://blog.csdn.net/mchdba/article/details/72540806  ,安装好gpfdist后,gpload也自动有了,可以自动使用. 安装完后,可以启动gpfdist服务:nohup /data/greenplum/bin/gpfdist -d /data/greenplum/ -p 8090> /home/gpadmin/gpfdist.log  & 2,gpload简介