Geodatabase - 修改字段别名(Field Alias)

  以下代码演示的是通过个人数据库打开要素类,并对指定的字段别名进行修改,其中,需要注意的是,不能通过Engine中的AxMapControl直接获得,如

1  //直接获得IFeatureClass.
2 //ESRI.ArcGIS.Carto.ILayer lyr = mapCtrl_main.get_Layer(0);
3 //ESRI.ArcGIS.Carto.IFeatureLayer flyr = (ESRI.ArcGIS.Carto.IFeatureLayer)lyr;
4 //ESRI.ArcGIS.Geodatabase.IFeatureClass fc = flyr.FeatureClass;

  这样是不可以的:

 1 /// <summary>
 2         /// 修改字段别名.
 3         /// </summary>
 4         /// <param name="personalWorkspacePath">个人数据库路径(当然可以为其他类型数据库),如"G:\doc\gis\1.400\data\pdb.mdb"</param>
 5         /// <param name="featureClassName">要素类名,如"hyd1_4l_1"</param>
 6         /// <param name="oriFieldName">原字段别名,如"FNODE_".</param>
 7         /// <param name="desFieldName">新字段别名,如"fnode".</param>
 8         private void AlterFieldAliasName(string personalWorkspacePath, string featureClassName, string oriFieldName, string desFieldName) {
 9             //通过IFeatureWorkspace获得IFeatureClass.
10             ESRI.ArcGIS.Geodatabase.IWorkspaceFactory wsf = new ESRI.ArcGIS.DataSourcesGDB.AccessWorkspaceFactoryClass();
11             ESRI.ArcGIS.Geodatabase.IWorkspace ws = wsf.OpenFromFile(personalWorkspacePath, 0);
12             ESRI.ArcGIS.Geodatabase.IFeatureWorkspace fws = (ESRI.ArcGIS.Geodatabase.IFeatureWorkspace)ws;
13             ESRI.ArcGIS.Geodatabase.IFeatureClass fc = fws.OpenFeatureClass(featureClassName);
14 
15             ESRI.ArcGIS.Geodatabase.ITable t = (ESRI.ArcGIS.Geodatabase.ITable)fc;
16             if (t.FindField(oriFieldName) == -1)    //无指定字段名.
17                 return;
18 
19             ESRI.ArcGIS.Geodatabase.IObjectClass objClass = (ESRI.ArcGIS.Geodatabase.IObjectClass)fc;
20             ESRI.ArcGIS.Geodatabase.ISchemaLock slock = (ESRI.ArcGIS.Geodatabase.ISchemaLock)objClass;
21             try {
22                 slock.ChangeSchemaLock(ESRI.ArcGIS.Geodatabase.esriSchemaLock.esriExclusiveSchemaLock);
23                 ESRI.ArcGIS.Geodatabase.IClassSchemaEdit cSchemaEdit = (ESRI.ArcGIS.Geodatabase.IClassSchemaEdit)t;
24                 cSchemaEdit.AlterFieldAliasName(oriFieldName, desFieldName);
25                 MessageBox.Show("done");
26             }
27             catch (System.Exception ex) {
28                 MessageBox.Show(ex.Message);
29             }
30             finally {
31                 if (slock != null)
32                     slock.ChangeSchemaLock(ESRI.ArcGIS.Geodatabase.esriSchemaLock.esriSharedSchemaLock);
33             }
34         }

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。