⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 frmselectxxqh.cs

📁 以构建的方式来实现对通用的查询统计
💻 CS
字号:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Data.OleDb;
using System.Drawing;
using System.Text;
using System.Collections;
using System.Windows.Forms;
using dist.hb.EnvQueryStat.Pub;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Geodatabase;

namespace dist.hb.EnvQueryStat.Pub
{
  public partial class frmSelectXXQH : Form
  {
    public frmSelectXXQH()
    {
      InitializeComponent();
      m_OleDbConn = null;
      mapControl = null;
      FirstLayer = "";
      SecondLayer = "";
      thirdLayer = "";
      iLevel = 0;
      SelArrayList = null;
    }
    private OleDbConnection m_OleDbConn;//数据库链接
    public OleDbConnection OleDbConn
    {
      get { return m_OleDbConn; }
      set
      {
        if (value == null) return;
        if (value == m_OleDbConn) return;
        m_OleDbConn = value;
      }
    }

    public int iLevel;//需要提取的行政单位级别,其值是从1到3
    public string FirstLayer;//第一级行政区划
    public string SecondLayer;//第二级行政区划
    public string thirdLayer;//第三级行政区划
    public string FirstKeyField;//编码字段
    public string SecondKeyField;//编码字段
    public string ThirdKeyField;//编码字段
    public string FirstNameField;//名称字段
    public string SecondNameField;//名称字段
    public string ThirdNameField;//名称字段
    public ArrayList SelArrayList;//选择的行政区划列表
    public ESRI.ArcGIS.Controls.IMapControl4 mapControl;

    //加载所有的节点
    void LoadAll()
    {
      //创建根节点
      treeView1.Nodes.Clear();
      TreeNode nd = treeView1.Nodes.Add("全部");

      if (mapControl == null || FirstLayer == null) return;
      IFeatureLayer FLayer = clsGISPub.FindFeatureLayer(mapControl.Map, FirstLayer);
      if (FLayer == null) return;
      IFeatureClass fc = FLayer.FeatureClass;
      IFeatureCursor FCur = clsGISPub.SearchFeature(fc, "");
      if (FCur == null) return;
      IFeature pFeat;
      int KeyFieldIndex = fc.FindField(FirstKeyField);
      int NameFieldIndex = fc.FindField(FirstNameField);
      int iCount = 0;
      while (true)
      {
        pFeat = FCur.NextFeature();
        if (pFeat == null) break;
        MyTreeNodeInfo NodeInfo = new MyTreeNodeInfo();
        NodeInfo.KeyFieldIndex = KeyFieldIndex;
        NodeInfo.NameFieldIndex = NameFieldIndex;
        NodeInfo.pFeat = pFeat;
        
        TreeNode newND = nd.Nodes.Add(NodeInfo.ToString());
        newND.Tag = NodeInfo;
        //加载第二级节点
        LoadSecondNode(newND);
        iCount++;
        if (iCount>1)     break;
      }
    }

    void LoadSecondNode(TreeNode nd)
    {
      if (nd == null) return;
      MyTreeNodeInfo ParentNodeInfo = (MyTreeNodeInfo)nd.Tag;
      if(ParentNodeInfo == null) return;
      
      if(mapControl == null || FirstLayer == null) return;

      IFeatureLayer FLayer = clsGISPub.FindFeatureLayer(mapControl.Map, SecondLayer);
      if(FLayer == null) return;
      IFeatureClass fc = FLayer.FeatureClass;
      IFeatureCursor FCur = clsGISPub.InSearch(fc,ParentNodeInfo.pFeat.ShapeCopy,"", esriSpatialRelEnum.esriSpatialRelContains);
      if(FCur == null) return;
      IFeature pFeat;
      int KeyFieldIndex = fc.FindField(SecondKeyField);
      int NameFieldIndex = fc.FindField(SecondNameField);
      while (true)
	    {
    	  pFeat = FCur.NextFeature();       
        if(pFeat == null) break;
        MyTreeNodeInfo NodeInfo = new MyTreeNodeInfo();
        NodeInfo.KeyFieldIndex= KeyFieldIndex;
        NodeInfo.NameFieldIndex = NameFieldIndex;
        NodeInfo.pFeat = pFeat;
        TreeNode newND = nd.Nodes.Add(NodeInfo.ToString()); ;
        newND.Tag = NodeInfo;
        //加载第三级节点
        LoadThirdNode(newND);
        
      }

    }
    void LoadThirdNode(TreeNode nd)
    {
      if (nd == null) return;
      MyTreeNodeInfo ParentNodeInfo = (MyTreeNodeInfo)nd.Tag;
      if (ParentNodeInfo == null) return;

      if (mapControl == null || FirstLayer == null) return;

      IFeatureLayer FLayer = clsGISPub.FindFeatureLayer(mapControl.Map, thirdLayer);
      if (FLayer == null) return;
      IFeatureClass fc = FLayer.FeatureClass;
      IFeatureCursor FCur = clsGISPub.InSearch(fc, ParentNodeInfo.pFeat.ShapeCopy, "", esriSpatialRelEnum.esriSpatialRelContains);
      if (FCur == null) return;
      IFeature pFeat;
      int KeyFieldIndex = fc.FindField(ThirdKeyField);
      int NameFieldIndex = fc.FindField(ThirdNameField);
      while (true)
      {
        pFeat = FCur.NextFeature();
        if (pFeat == null) break;
        MyTreeNodeInfo NodeInfo = new MyTreeNodeInfo();
        NodeInfo.KeyFieldIndex = KeyFieldIndex;
        NodeInfo.NameFieldIndex = NameFieldIndex;
        NodeInfo.pFeat = pFeat;
        TreeNode newND = nd.Nodes.Add(NodeInfo.ToString());
        newND.Tag = NodeInfo;
      }

    }

    //行政区划编码列表
    void SelectNode(ArrayList list)
    {
      if(list == null) return;
      foreach (TreeNode nd in treeView1.Nodes)
      {
        MyTreeNodeInfo nodeInfo = (MyTreeNodeInfo)nd.Tag;
        if (nodeInfo == null) continue;
        object code = nodeInfo.pFeat.get_Value(nodeInfo.KeyFieldIndex);
        if (list.Contains(code)) nd.Checked = true;
      }
    }

    private void frmSelectXXQH_Load(object sender, EventArgs e)
    {
      LoadAll();
      SelectNode(SelArrayList);
    }

    private void treeView1_AfterCheck(object sender, TreeViewEventArgs e)
    {
      //e.Node
    }


  }



}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -