arcgis engine中添加及修改圖層的欄位
來源:互聯網
上載者:User
ILayer layer = m_hookHelper.FocusMap.get_Layer(layerIndex); //輸入圖層1
IFeatureLayer flayer = (IFeatureLayer)layer;
IFeatureClass fclass = flayer.FeatureClass;
int featureCount = fclass.FeatureCount(null);
int idField = -2,proField=-2; //第一列和第二列對應的屬性欄位的序號
if ((idField=fclass.FindField(fields[0]))==-1) //若在圖層中不存在第一列所對應的屬性欄位,則退出
{
MessageBox.Show("圖層中找不到與第一列對應的屬性欄位");
return;
}
if ((proField=fclass.FindField(fields[1]))==-1)
{ //若圖層中不存在第二列對應的屬性欄位,則在該圖層上添加欄位
#region 添加欄位
IField newField = new FieldClass();
IFieldEdit fieldEdit = (IFieldEdit)newField;
fieldEdit.Name_2 = fields[1];
fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
fclass.AddField(newField);
#endregion
}
#region 修改欄位的值
IDataset dataset = fclass as IDataset;
IWorkspace workspace = dataset.Workspace;
IWorkspaceEdit wse = workspace as IWorkspaceEdit;
wse.StartEditing(false);
wse.StartEditOperation();
proField = fclass.FindField(fields[1]);
for (int i = 0; i < featureCount; i++)
{
tmp = fclass.GetFeature(i).get_Value(idField).ToString();
for (int j = 0; j < pro1.Length; j++)
{
if (tmp == pro1[j])
{
fclass.GetFeature(i).set_Value(proField, pro2[j]);
fclass.GetFeature(i).Store();
break;
}
}
}
wse.StopEditOperation();
wse.StopEditing(true);
#endregion