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