You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C# WinForms基于SQL表构建地区-国家-城市层级TreeView求助

实现三级TreeView层级结构(嵌套循环+条件语句)

没问题,我来帮你搞定这个三级TreeView的构建!核心思路就是按「地区→国家→城市」的层级,先去重分组,再逐层嵌套遍历添加节点。下面是具体的实现方法,用嵌套循环+条件语句就能搞定:

前提假设

假设你已经有:

  • 一个名为dt的DataTable,包含REGION、NATION、CITY三个字段
  • WinForms中的TreeView控件,名为treeView1

代码实现

// 1. 先收集所有不重复的地区,避免创建重复的一级节点
List<string> uniqueRegions = new List<string>();
foreach (DataRow row in dt.Rows)
{
    string region = row["REGION"].ToString().Trim();
    // 条件判断:如果地区不在列表里,就添加进去
    if (!uniqueRegions.Contains(region))
    {
        uniqueRegions.Add(region);
    }
}

// 遍历每个地区,创建一级节点
foreach (string region in uniqueRegions)
{
    TreeNode regionNode = new TreeNode(region);
    treeView1.Nodes.Add(regionNode);

    // 2. 收集当前地区下所有不重复的国家
    List<string> uniqueNations = new List<string>();
    foreach (DataRow row in dt.Rows)
    {
        string currentRegion = row["REGION"].ToString().Trim();
        string nation = row["NATION"].ToString().Trim();
        // 条件判断:匹配当前地区,且国家未被收集过
        if (currentRegion.Equals(region, StringComparison.OrdinalIgnoreCase) && !uniqueNations.Contains(nation))
        {
            uniqueNations.Add(nation);
        }
    }

    // 遍历每个国家,创建二级节点
    foreach (string nation in uniqueNations)
    {
        TreeNode nationNode = new TreeNode(nation);
        regionNode.Nodes.Add(nationNode);

        // 3. 收集当前地区+国家下的所有城市,创建三级节点
        foreach (DataRow row in dt.Rows)
        {
            string currentRegion = row["REGION"].ToString().Trim();
            string currentNation = row["NATION"].ToString().Trim();
            string city = row["CITY"].ToString().Trim();
            // 条件判断:同时匹配当前地区和国家
            if (currentRegion.Equals(region, StringComparison.OrdinalIgnoreCase) 
                && currentNation.Equals(nation, StringComparison.OrdinalIgnoreCase))
            {
                TreeNode cityNode = new TreeNode(city);
                nationNode.Nodes.Add(cityNode);
            }
        }
    }
}

关键细节解释

  • 去重逻辑:每一层都先收集不重复的父节点(地区、国家),避免出现同一个地区/国家被多次添加的情况;
  • 大小写兼容:用StringComparison.OrdinalIgnoreCase做匹配,避免因为大小写差异(比如"Europe"和"europe")导致的分组错误,如果不需要可以换成普通的Equals(region);
  • 层级嵌套:三层循环对应三级节点,每一层都通过条件判断筛选出当前父节点下的子数据,保证层级关系正确。

如果你的数据量很大,也可以先对DataTable按REGION、NATION排序,这样遍历的时候可以提前跳出重复判断,提升一点性能,但对于常规数据量,上面的代码完全够用。

内容的提问来源于stack exchange,提问作者Paradix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 07:18:06