读取属性表是AE开发中经常见到的,这里对该项功能的实现进行详细的描述,在示例代码中有详细介绍,在这里不再赘述。代码如下:
public DataTable InitDataTable(IFeatureLayer pFeatureLayer )//pFeatureLayer 是读取的要素集,也就是MapControl中的一个ILayer
{
if (pFeatureLayer == null)
return;
IFeature pFeature = null;
IFeatureCursor pFeatureCurrsor = pFeatureLayer.Search(null, true);//获得要素集中的要素光标,pFeatureLayer.Search
//的第二个参数可以对读取的要素进行筛选。
DataTable dataTable = new DataTable();//GridView的数据源
DataColumn dataCol = null;//读取列,是用来获得列的字段数据类型以及字段名
DataRow dataRow = null;//读取行,获得单元数据
IField pField = null;//字段
for (int i = 0; i < pFeatureLayer.FeatureClass.Fields.FieldCount; i++)
{
dataCol = new DataColumn();
pField = pFeatureLayer.FeatureClass.Fields.get_Field(i); //获得属性表中的字段
dataCol.ColumnName = pField.AliasName;//获得字段名
dataCol.DataType = System.Type.GetType(ParseFieldType(pField.Type));//获得Winform中与ESRI想对应的数据类型
dataTable.Columns.Add(dataCol);//填充数据
}
pFeature = pFeatureCurrsor.NextFeature();//获得第一个符合要求的Feature,即一行数据(要素个体、要素类)
//IGeometry pPolGeo = pFeature.Shape;
//IRelationalOperator pRel = pPolGeo as IRelationalOperator;
while (pFeature != null)
{
dataRow = dataTable.NewRow();
for (int i = 0; i < dataTable.Columns.Count; i++)
{
dataRow[i] = pFeature.get_Value(i);//通过遍历得到IFeature中的数据
}
dataTable.Rows.Add(dataRow);//增加一行
pFeature = pFeatureCurrsor.NextFeature();//获得下一个IFeature
}
return dataTable;
// dataGridView1.DataSource = dataTable;//加载到GridView示例
//StaticValue.yztable = dataTable;
}
/// <summary>
/// 得Winform中与ESRI想对应的数据类型,没有的使用string
/// </summary>
/// <param name="esriFieldType "></param>
public static string ParseFieldType(esriFieldType fieldType)
{
switch (fieldType)
{
case esriFieldType.esriFieldTypeBlob:
return "System.String";
case esriFieldType.esriFieldTypeDate:
return "System.DateTime";
case esriFieldType.esriFieldTypeDouble:
return "System.Double";
case esriFieldType.esriFieldTypeGeometry:
return "System.String";
case esriFieldType.esriFieldTypeGlobalID:
return "System.String";
case esriFieldType.esriFieldTypeGUID:
return "System.String";
case esriFieldType.esriFieldTypeInteger:
return "System.Int32";
case esriFieldType.esriFieldTypeOID:
return "System.String";
case esriFieldType.esriFieldTypeRaster:
return "System.String";
case esriFieldType.esriFieldTypeSingle:
return "System.Single";
case esriFieldType.esriFieldTypeSmallInteger:
return "System.Int32";
case esriFieldType.esriFieldTypeString:
return "System.String";
default:
return "System.String";
}
}
上面的就是对属性表读取的一般方法,如果有错误的地方欢迎各位看官指正!