最后的圣洁

博客园 首页 新随笔 联系 订阅 管理
 
ILayer player;
        public OpenPropetryDialog(ILayer layer)
        {
            this.player = layer;
        }

        public DataTable FillTable( string tableName)
         {
             DataTable datable = CreateTable(player, tableName);
             ITable pTable = player as ITable;
             string shape = GetShapeType(player);
             ICursor pCursor = pTable.Search(null, false);
             IRow pRow = pCursor.NextRow();
             while (pRow !=null )
             {
                 DataRow dataRow = datable.NewRow() ;
                 for (int i = 0; i < pRow .Fields .FieldCount ; i++)
                 {
                    if (pRow .Fields .get_Field (i).Type ==esriFieldType .esriFieldTypeGeometry )
                     {
                         dataRow[i] = shape;
                     }
                     else if (pRow.Fields.get_Field(i).Type == esriFieldType.esriFieldTypeBlob)
                     {
                         dataRow[i] = "element";
                     }
                     else
                     {
                         dataRow[i] = pRow.get_Value(i);
                     }
                 }
                 datable.Rows.Add(dataRow);
                 if (datable.Rows.Count > 200)
                 {
                     break;
                 }
                 else
                 {
                     pRow = pCursor.NextRow();//Pcursor先当于链表中移动的那个针,生成是头指针;
                 }

             }
             return datable;
         }

        private string GetShapeType(ILayer pLayer)
        {
            IFeatureLayer pFeatureLayer = player as IFeatureLayer;
            switch (pFeatureLayer .FeatureClass .ShapeType )
            {  
               
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint:
                    return "Point";
                   
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolygon:
                    return 
                           "Polygon";
                  
                case ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPolyline:
                    return "Polyline";
                   
                default:
                    return "UNkonw";
            }
        }
        private DataTable CreateTable(ILayer pLayer, string taleName)
        {
            DataTable datatable = new DataTable(taleName);
            ITable pTable = pLayer as ITable;
            DataColumn dataColum;
            for (int i = 0; i < pTable.Fields.FieldCount; i++)
            {
                IField pField = pTable.Fields.get_Field(i);
                dataColum = new DataColumn(pField.Name);
                if (pField.Name == pTable.OIDFieldName)
                {
                    dataColum.Unique = true;
                }
                dataColum.AllowDBNull = pField.IsNullable;
                dataColum.Caption = pField.AliasName;
                dataColum.DataType = System.Type.GetType(ParseFieldType(pField.Type));
                dataColum.DefaultValue = pField.DefaultValue;
                if (pField.VarType == 8)
                {
                    dataColum.MaxLength = pField.Length;
                }
                datatable.Columns.Add(dataColum);

            }

            return datatable;
        }

        private string ParseFieldType(esriFieldType esriFieldType)//由于ersi中得类型和。net中的类型不一样,所以需要转化
        {
            switch (esriFieldType)
            {
                case esriFieldType.esriFieldTypeBlob:
                    return "System.String";
                case esriFieldType.esriFieldTypeDate:
                    return "System.DateTime";
                case esriFieldType.esriFieldTypeDouble:
                    return "System.Double";
                case esriFieldType.esriFieldTypeGUID:
                    return "System.String";
                case esriFieldType.esriFieldTypeGeometry:
                    return "System.String";
                case esriFieldType.esriFieldTypeGlobalID:
                    return "System.String";
                case esriFieldType.esriFieldTypeInteger:
                    return "System.Int32";
                case esriFieldType.esriFieldTypeOID:
                    return "System.Int32";
               
                case esriFieldType.esriFieldTypeSingle:
                    return "System.Single";
                case esriFieldType.esriFieldTypeSmallInteger:
                    return "System.Int32";
                case esriFieldType.esriFieldTypeString:
                    return "System.String";
               
                default:
                    return "";
            }        

        }


上面的类封装了一个创建数据列表的类。


 private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)//使用cellClick方法而不是cellcontentClick方法
        {
           
          
            if (e.RowIndex !=-1)
            {
                IFeature pFeature;
                try
                {
                    int ID = Convert.ToInt32(dataGridView1.Rows[e.RowIndex].Cells[0].Value);
                     pFeature=(layer as IFeatureLayer).FeatureClass .GetFeature(ID);  
                }
                catch (Exception)
                {

                    pFeature = null;
                }
                if (pFeature !=null)
                {
                    if (pFeature .Shape .GeometryType ==  ESRI.ArcGIS.Geometry.esriGeometryType.esriGeometryPoint )
                    {
                        this.axMapControl.CenterAt((IPoint)pFeature.Shape);

                    
                        
                    }
                    else
                    {
                        IEnvelope pEnve = pFeature.Shape.Envelope;
                        pEnve.Expand(5, 5, true);//包络线的的xy远离;
                        this.axMapControl.ActiveView.Extent = pEnve;//activVIEW屏幕为视图
                        
                    }

                }
                this.axMapControl.Refresh();
                this.axMapControl.ActiveView.ScreenDisplay.UpdateWindow();
              
                switch (pFeature .Shape .GeometryType )
                {
                   
                      
                   
                   
                  
                    case esriGeometryType.esriGeometryPoint:
                        break;
                    case esriGeometryType.esriGeometryPolygon:
                        this.axMapControl.FlashShape(((pFeature.Shape) as IGeometry), 3, 300, Type.Missing);
                        break;
                    case esriGeometryType.esriGeometryPolyline:
                        
                    
                    default:
                        break;
                }

               
                
            }
        
        }

  

posted on 2012-11-29 23:53  最后的圣洁  阅读(1534)  评论(0编辑  收藏  举报