上篇文章讲到如何将ITable转换为DataTable,转换为DataTable主要是为了操作编辑.dbf里面的数据,当编辑完之后,若有必要,需要再将DataTable转换为ITable。这个过程比较繁琐,因为所有字段都需要手动添加,设置字段格式、名称、长度等,需要和源.dbf数据中的字段相同。具体代码如下:
public ITable RNtoITable(DataTable pdt, IFeatureWorkspace pifw, string e)
{
IField pField = null;
IFields fields = new FieldsClass();
IFieldsEdit fieldsEdit = (IFieldsEdit)fields;
//有几个字段就令其等于几
fieldsEdit.FieldCount_2 = 3;
//具体字段
pField = new FieldClass();
IFieldEdit fieldEdit = (IFieldEdit)pField;
fieldEdit.Name_2 = "Route_ID";
fieldEdit.AliasName_2 = "Route_ID";
fieldEdit.Type_2 = esriFieldType.esriFieldTypeString;
fieldEdit.Length_2 = 13;
fieldEdit.Editable_2 = true;
fieldsEdit.set_Field(0, pField);
IField pField1 = new FieldClass();
IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
fieldEdit1.Name_2 = "PathName";
fieldEdit1.AliasName_2 = "PathName";
fieldEdit1.Type_2 = esriFieldType.esriFieldTypeString;
fieldEdit1.Length_2 = 60;
fieldEdit1.Editable_2 = true;
fieldsEdit.set_Field(1, pField1);
IField pField2 = new FieldClass();
IFieldEdit fieldEdit2 = (IFieldEdit)pField2;
fieldEdit2.Name_2 = "Route_Kind";
fieldEdit2.AliasName_2 = "Route_Kind";
fieldEdit2.Type_2 = esriFieldType.esriFieldTypeString;
fieldEdit2.Length_2 = 2;
fieldEdit2.Editable_2 = true;
fieldsEdit.set_Field(2, pField2);
//RN为转换后的ITable名称,e是保存地址
if (System.IO.File.Exists(e + "\\RN.dbf"))
{
System.IO.File.Delete(e + "\\RN.dbf");
}
//在pifw工作空间创建名为RN的ITable
ITable pt = pifw.CreateTable("RN", fields, null, null, "");
int count = pdt.Rows.Count;
//往ITable中加数据
for (int k = 0; k < count; k++)
{
//ITable 的记录
IRow row = pt.CreateRow();
DataRow pRrow = pdt.Rows[k];
// 添加记录
row.set_Value(1, pRrow.ItemArray.GetValue(1));
row.set_Value(2, pRrow.ItemArray.GetValue(3));
row.set_Value(3, pRrow.ItemArray.GetValue(2));
row.Store();
}
return pt;
}