📄 frmselectxxqh.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 + -