基于C#的ArcEngine二次开发49:修改图层名称和别名、字段名称

简介: 基于C#的ArcEngine二次开发49:修改图层名称和别名、字段名称

1 修改图层名称和别名

Object classes in a Geodatabase can have between one and three names. The name of the object class, which is the same as the name of the table in the DBMS in which the objects in the object class are stored, the alias name which the user can set for display purposes in end user applications. The third name is the model name which is a tool for developers of custom objects to use to guarantee the names of objects independent of the true name or alias name.


代码:以gdb中图层为例修改图层名称(name)和别名(alias name)

public void AlterName()
{
    Type type = Type.GetTypeFromProgID("esriDataSourcesGDB.FileGDBWorkspaceFactory");
    IWorkspaceFactory pWorksapcFactory = (IWorkspaceFactory)Activator.CreateInstance(type);
    IWorkspace pWorkspace = pWorksapcFactory.OpenFromFile(@"F:\GIS测试数据\测试.gdb", 0);
    IFeatureWorkspace pFWK = pWorkspace as IFeatureWorkspace;
    IFeatureClass pFeatureClass = pFWK.OpenFeatureClass("SSS");
    //修改图层名称
    IDataset dataset = pFeatureClass as IDataset;
    dataset.Rename("MC");
    //修改图层别名
    AlterAliasName(pFeatureClass);
}
/// <summary>
/// 修改数据集别名
/// </summary>
/// <param name="objectClass">对象类</param>
public void AlterAliasName(IObjectClass objectClass)
{
    //cast for the IClassSchemaEdit
    IClassSchemaEdit pOcSchemaEdit = objectClass as IClassSchemaEdit;
    //set and exclusive lock on the class 设置并独占锁
    ISchemaLock schemaLock = (ISchemaLock)objectClass;
    schemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);
    //alter the class extension for the class
    pOcSchemaEdit.AlterAliasName("修改别名");
    //release the exclusive lock 释放锁
    schemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock);
}

2 修改字段名称


修改字段名称需注意设置锁模式为执行模式锁(esriExclusiveSchemaLock),当其他应用已经锁定要素类,不管是(esriExclusiveSchemaLock,还是esriSharedSchemaLock),都无法修改当前要素类锁类型,即无法修改字段名称。当字段修改完成后应该将当前的执行模式锁(esriExclusiveSchemaLock)改为共享锁(esriExclusiveSchemaLock)。另外IClassSchemaEdit4接口还可以修改属性域、字段缺省值(即默认值)等等,但是不支持字段长度修改。

/// <summary>
        /// 修改字段名称
        /// </summary>
        /// <param name="pFeatureClass">目标要素类</param>
        /// <param name="oldFieldName">目标字段名称</param>
        /// <param name="newFieldName">目标字段新名称</param>
        /// <param name="aliasName">目标字段新别名</param>        
        private bool ModifyFieldName(IFeatureClass pFeatureClass, string oldFieldName, string newFieldName, string aliasName)
        {
            bool isModified = false;
            ISchemaLock pSchemaLock = null;
            try
            {
                IFields pFields = pFeatureClass.Fields;
                int fIndex = pFields.FindField(oldFieldName);
                if (fIndex == -1) return isModified;
                pSchemaLock = pFeatureClass as ISchemaLock;
                pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriExclusiveSchemaLock);//设置编辑锁
                IClassSchemaEdit4 pClassSchemaEdit = pFeatureClass as IClassSchemaEdit4;
                pClassSchemaEdit.AlterFieldAliasName(oldFieldName, aliasName);
                pClassSchemaEdit.AlterFieldName(oldFieldName, newFieldName);
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally
            {
               //释放编辑锁
pSchemaLock.ChangeSchemaLock(esriSchemaLock.esriSharedSchemaLock); 
                isModified = true;
            }
            return isModified;
        }
相关文章
|
关系型数据库 MySQL C#
C# winform 一个窗体需要调用自定义用户控件的控件名称
给用户控件ucQRCode增加属性: //二维码图片 private PictureBox _pictureBoxFSHLQrCode; public PictureBox PictureBoxFSHLQrCode {   get { return _pictureBoxFSHLQrCode; }   set { this.pictureBoxFSHLQrCode = value; } } 在Form1窗体直接调用即可: ucQRCode uQRCode=new ucQRCode(); ucQRCode.PictureBoxFSHLQrCode.属性= 要复制或传给用户控件上的控件的值
76 0
|
6月前
|
开发框架 .NET 编译器
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
程序与技术分享:C#基础知识梳理系列三:C#类成员:常量、字段、属性
44 2
|
7月前
|
C#
C#获取文件基本信息,文件名称、修改时间、文件路径等
C#获取文件基本信息,文件名称、修改时间、文件路径等
73 0
[闻缺陷则喜]C#程序集名称
[闻缺陷则喜]C#程序集名称
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验五:实验名称:C#面向对象技术
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
C#面向对象程序设计课程实验四:实验名称:C#面向对象程序设计基础
|
存储 算法 C#
C#面向对象程序设计课程实验三:实验名称:C#数组和集合
C#面向对象程序设计课程实验三:实验名称:C#数组和集合
C#面向对象程序设计课程实验三:实验名称:C#数组和集合
|
C# Windows 容器
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验二: 实验名称:Windows 窗体程序
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制
C#面向对象程序设计课程实验一:实验名称:C#语言基础、程序流程控制