添加新字段和域

时间:2022-02-12 07:52:26
添加新字段和域

一、添加新字段
    要在一张新表里或一个要素类里增加字段,只需创建一个新字段,并设置好它的属性,然后加入到字段集中即可。
IFieldEdit pNewField = new FieldClass();
pNewField.Name = "Average";
pNewField.Type = esriFieldType.esriFieldTypeInteger;
pNewField.AliasName = "Average Income";
pNewField.Length = 16;
pTable.AddField(pNewField);

二、创建新的范围域或编码域
    Geodatabase表或要素类可以通过使用域的方法来增强属性值的有效性。域是在Geodatabase的层次上创建的,可以应用在该Geodatabase表中的任意多个字段中。
    Domain是抽象类,有2个可创建的子类:RangeDomain和Coded Value Domain。
    RangeDomain对象用来对数值型的属性值进行范围限制(最大值、最小值)
    CodedValueDomain对象用于定义一系列合适的可接受的值(字符串型或数值型)。
    每创建一个Domain,都需要设定其字段类型。例如,如果创建了一个适用于整型字段的域,那么这个域就不能被双精度型字段使用。

IRangeDomain pRDomain = new RangeDomainClass();
pRDomain.MinValue = 0;
pRDomain.MaxValue = 100;
IDomain pDomain = pRDomain as IDomain;
pDomain.Name = "Diameter";
pDomain.FieldType = esriFieldType.esriFieldTypeInteger;

三、在Geodatabase中增加域
    创建好了域之后,并不能简单的应用到字段上,而必须先将其和一个Geodatabase关联起来。在Geodatabase中增加了域之后,它就可以被应用到这个Geodatabase中任何表或要素类的任意多个字段中(假设这些字段类型与该域相同)。增加域的方法是IWorkspaceDomains.AddDomain()。Domain不能应用于Shapefiles或ArcInfo Coverages。

IWorkspaceFactory pAccessFact;
IWorkspace pGDBWorkspace;
pAccessFact = new AccessWorkspaceFactoryClass();
pGDBWorkspace = pAccessFact.OpenFromFile("C:\\City.mdb", 0);

IWorkspaceDomains pWSDomains = pGDBWorkspace as IWorkspaceDomains;
pWSDomains.AddDomain(pRDomain);

四、将域应用到字段
    使用IFieldEdit的Domain属性可以把一个Domain对象应用到某个具体的字段。由于这一属性是通过引用使用的,对域的修改会立即影响到应用该域的字段,域可以被同一个Geodatabase里的字段重复多次使用。

IFieldEdit pNewField = new FieldClass();
pNewField.Name = "Average";
pNewField.Type = esriFieldType.esriFieldTypeInteger;
pNewField.AliasName = "Average Income";
pNewField.Length = 16;
pNewField.Domain = pRDomain;
pTable.AddField(pNewField);
    注意:域只有在它被加入到Geodatabase中之后才能被使用。如果pRDomain没用先被加入到Geodatabase中,代码不会返回错误,但是域并不起作用。