ArcGIS二次开发,arcengine将DataTable转为ITable

上篇文章讲到如何将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;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值