C#+AE:如何用TreeList控制項實現屬性查詢

來源:互聯網
上載者:User

閑話不多,代碼如下:

     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);
            }
        }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.