• C#+AE:如何用TreeList控件实现属性查询


    闲话不多,代码如下:

         private void button1_Click(object sender, EventArgs e)
            {
                OpenFileDialog ofd = new OpenFileDialog();
                ofd.Filter = "*.mxd|*.mxd";
                ofd.ShowDialog();

                string fp = ofd.FileName;
                axMapControl1.LoadMxFile(fp,0,Type.Missing);
            }

            bool bu = false;
            private void button2_Click(object sender, EventArgs e)
            {
                bu = true;

            }

         private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e)
            {

                try
                {
                    if (bu)
                    {
                        //先创建一张表,按照自己的想法;需要两张表???
                        //或者创建List也行,需要合适的方法赋值给TreeList
                        DataTable pDataTable = new DataTable();
                        pDataTable.Columns.Add("ID");
                        pDataTable.Columns.Add("Name");
                        pDataTable.Columns.Add("ParentID");

                        DataRow pDataRow = null;
                        for (int i = 0; i < axMapControl1.Map.LayerCount;i++ )
                        {
                            pDataRow=pDataTable.NewRow();
                            string lyrName = axMapControl1.Map.get_Layer(i).Name;
                            pDataRow["ID"] = lyrName;
                            pDataRow["Name"] = lyrName;
                            pDataRow["ParentID"] = -1;
                            pDataTable.Rows.Add(pDataRow);

                           
                            //开始点选查询
                            IMap pMap;
                            pMap = axMapControl1.Map as IMap;

                            //获取点图层
                            IFeatureLayer pFeatureLayer;
                            pFeatureLayer = pMap.get_Layer(i) as IFeatureLayer;
                            IFeatureClass pFeatureClass;
                            pFeatureClass = pFeatureLayer.FeatureClass;

                            //获取鼠标点击点
                            IPoint pPoint;
                            pPoint = new PointClass();
                            pPoint.PutCoords(e.mapX, e.mapY);

                            IGeometry pGeometry;

                            //定义缓冲区
                            double db = 2;
                            ITopologicalOperator pTop;
                            pTop = pPoint as ITopologicalOperator;
                            pGeometry = pTop.Buffer(db);

                            //选取
                            pMap.SelectByShape(pGeometry, null, false);
                            pMap.ClearSelection();

                            //空间过滤运算
                            ISpatialFilter pSpatialFilter = new SpatialFilterClass();
                            pSpatialFilter.Geometry = pGeometry;


                            //设置为不同的要素类型的图层
                            switch (pFeatureClass.ShapeType)
                            {
                                case esriGeometryType.esriGeometryPoint:
                                    pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelContains;
                                    break;
                                case esriGeometryType.esriGeometryPolyline:
                                    pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelCrosses;
                                    break;
                                case esriGeometryType.esriGeometryPolygon:
                                    pSpatialFilter.SpatialRel = esriSpatialRelEnum.esriSpatialRelIntersects;
                                    break;

                            }
                            pSpatialFilter.GeometryField = pFeatureClass.ShapeFieldName;

                            //指针
                            IFeatureCursor pFeatureCursor;
                            pFeatureCursor = pFeatureClass.Search(pSpatialFilter, false);
                            IFeature pFeature;
                            pFeature = pFeatureCursor.NextFeature();

                            //开始遍历
                            while (pFeature != null)
                            {

                                //获取要素的字段名和字段值
                                int n = pFeature.Fields.FieldCount; //这句话很重要,得到字段数目;
                                string sName;
                               // object oValue;
                                string sValue;
                              

                                //这句话的对象需要随着地图的改变而改变。可以是ID,FID 等带有唯一标识身份的 东西。
                                    int index=pFeature.Fields.FindField("ObjectID");
                                    if (index == -1)
                                        return;
                                    IField pField = pFeature.Fields.get_Field(index);
                                    sName = pField.Name;
                                  
                                    sValue = pFeature.get_Value(index).ToString();
                                   
                                  
                                        pDataRow = pDataTable.NewRow();
                                       
                                //之所以这样赋值是为了保证ID的唯一性;
                                        pDataRow["ID"] = lyrName + sValue;
                                        //赋值给ObjectID等的值,这样是为了好合并表;
                                        pDataRow["Name"] = sValue;
                                        pDataRow["ParentID"] = lyrName;
                                        pDataTable.Rows.Add(pDataRow);


                                    //}

                                  

                                //}
                                pFeature = pFeatureCursor.NextFeature();

                            }
                        }
                       //   dataGridView1.DataSource = pDataTable;
                        treeList1.DataSource = pDataTable;
                        treeList1.ParentFieldName="ParentID";
                    

                     
                    }

                }
                catch(Exception ex)
                {
                    MessageBox.Show(ex.Message);
                }
            }

  • 相关阅读:
    使用 RAISERROR
    简单计算 2个日期 相差的 天数 和 小时数
    一个 SQL 分段排序的问题(也可以理解为 段内汇总排序问题)
    清除数据库里面所有用户表的数据
    SQL for xml path 应用 很详细
    mybatis读取配置文件报错:Could not find resource configuration.xml
    Attribute "resource" must be declared for element type "mapper".
    Mac OS X Common Lisp环境配置
    【自己习惯太差】最近看书的总结(1),慢慢改正自己的习惯
    LMS权值更新法则
  • 原文地址:https://www.cnblogs.com/yanhan/p/2699873.html
Copyright © 2020-2023  润新知