• 【转载】ArcEngine ITable 与System.DataTable相互转换


    /// <summary>
            /// 打开dbf表
            /// </summary>
            /// <param name="pathName"></param>
            /// <param name="tableName"></param>
            /// <returns></returns>
            public static ITable OpenTable(string pathName, string tableName)
            {
                // Create the workspace name object.
                IWorkspaceName workspaceName = new WorkspaceNameClass();
                workspaceName.PathName = pathName;
                workspaceName.WorkspaceFactoryProgID = "esriDataSourcesFile.shapefileworkspacefactory";
                // Create the table name object.
                IDatasetName dataSetName = new TableNameClass();
                dataSetName.Name = tableName;
                dataSetName.WorkspaceName = workspaceName;
                // Open the table.
                IName name = (IName)dataSetName;
                ITable table = (ITable)name.Open();
                return table;
            }
            /// <summary>
            /// 将ITable转换为DataTable
            /// </summary>
            /// <param name="mTable"></param>
            /// <returns></returns>
            public static DataTable ToDataTable(ITable mTable)
            {
                try
                {
                    DataTable pTable = new DataTable();
                    for (int i = 0; i < mTable.Fields.FieldCount; i++)
                    {
                        pTable.Columns.Add(mTable.Fields.get_Field(i).Name);
                    }
                    ICursor pCursor = mTable.Search(null, false);
                    IRow pRrow = pCursor.NextRow();
                    while (pRrow != null)
                    {
                        DataRow pRow = pTable.NewRow();
                        string[] StrRow = new string[pRrow.Fields.FieldCount];
                        for (int i = 0; i < pRrow.Fields.FieldCount; i++)
                        {
                            StrRow[i] = pRrow.get_Value(i).ToString();
                        }
                        pRow.ItemArray = StrRow;
                        pTable.Rows.Add(pRow);
                        pRrow = pCursor.NextRow();
                    }
                    return pTable;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
            /// <summary>
            /// 把DataTable转为ITable ,tempPath 不含文件名的问价夹路径
            /// </summary>
            /// <param name="mTable"></param>
            /// <returns></returns>
            public static  ITable  ToITable(DataTable  mTable,string tempPath)
            {
                try
                {
                    #region 新建表字段
                    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 = "FromField";
                    fieldEdit.AliasName_2 = "开始字段值";
                    fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit.Editable_2 = true;
                    //添加开始字段
                    fieldsEdit.set_Field(0, pField);
                    IField pField1 = new FieldClass();
                    IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
                    fieldEdit1.Name_2 = "ToField";
                    fieldEdit1.AliasName_2 = "结束字段值";
                    fieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit1.Editable_2 = true;
                    //添加结束字段
                    fieldsEdit.set_Field(1, pField1);
                    IField pField2 = new FieldClass();
                    IFieldEdit fieldEdit2 = (IFieldEdit)pField2;
                    fieldEdit2.Name_2 = "outField";
                    fieldEdit2.AliasName_2 = "分类字段值";
                    fieldEdit2.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit2.Editable_2 = true;
                    //添加重分类字段
                    fieldsEdit.set_Field(2, pField2);
                    #endregion
                    ShapefileWorkspaceFactoryClass class2 = new ShapefileWorkspaceFactoryClass();
                    ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(tempPath, 0);
                    IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
                    //删除已有的
                    if (System.IO.File.Exists(tempPath + "重分类.dbf"))
                    {
                        System.IO.File.Delete(tempPath + "重分类.dbf");
                    }
                    //创建空表
                    ESRI.ArcGIS.Geodatabase.ITable pTable;
                    pTable = pFWS.CreateTable("重分类", fieldsEdit, null, null, "");
                    
                    //获取表中记录数
                    int count=mTable .Rows .Count ;
                    //转换为ITable中的数据
                    for(int k=0;k<count ;k++)
                    {
                        //ITable 的记录
                        IRow row = pTable.CreateRow();
                      
                       DataRow pRrow=mTable .Rows[k];
                       //列元素
                       int rowNum= pRrow .ItemArray.Length;
                      
                        // 添加记录
                        for (int n=1;n<rowNum+1 ;n++)
                        {
                            row.set_Value(n,pRrow.ItemArray.GetValue(n-1));
                            row.Store ();
                        }
                    }
                    return pTable ;
                }
                catch (Exception ex)
                {
                    return null;
                }
            }
            /// <summary>
            ///保存DataTable表位DBF ,tempPath 文件完整路径
            /// </summary>
            /// <param name="mTable"></param>
            /// <returns></returns>
            public static bool  SaveTable(DataTable mTable, string tempPath)
            {
                try
                {
                    #region 新建表字段
                    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 = "FromField";
                    fieldEdit.AliasName_2 = "开始字段值";
                    fieldEdit.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit.Editable_2 = true;
                    //添加开始字段
                    fieldsEdit.set_Field(0, pField);
                    IField pField1 = new FieldClass();
                    IFieldEdit fieldEdit1 = (IFieldEdit)pField1;
                    fieldEdit1.Name_2 = "ToField";
                    fieldEdit1.AliasName_2 = "结束字段值";
                    fieldEdit1.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit1.Editable_2 = true;
                    //添加结束字段
                    fieldsEdit.set_Field(1, pField1);
                    IField pField2 = new FieldClass();
                    IFieldEdit fieldEdit2 = (IFieldEdit)pField2;
                    fieldEdit2.Name_2 = "outField";
                    fieldEdit2.AliasName_2 = "分类字段值";
                    fieldEdit2.Type_2 = esriFieldType.esriFieldTypeDouble;
                    fieldEdit2.Editable_2 = true;
                    //添加重分类字段
                    fieldsEdit.set_Field(2, pField2);
                    #endregion
                    string path = System.IO.Path.GetDirectoryName(tempPath);
                    string fileName = System.IO.Path.GetFileName(tempPath);
                    ShapefileWorkspaceFactoryClass class2 = new ShapefileWorkspaceFactoryClass();
                    ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(path, 0);
                    IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
                    //删除已有的
                    if (System.IO.File.Exists(tempPath))
                    {
                        System.IO.File.Delete(tempPath);
                    }
                    fileName = fileName.Split('.')[0];
                    //创建空表
                    ESRI.ArcGIS.Geodatabase.ITable pTable;
                    pTable = pFWS.CreateTable(fileName, fieldsEdit, null, null, "");
                    //获取表中记录数
                    int count = mTable.Rows.Count;
                    //转换为ITable中的数据
                    for (int k = 0; k < count; k++)
                    {
                        //ITable 的记录
                        IRow row = pTable.CreateRow();
    
                        DataRow pRrow = mTable.Rows[k];
                        //列元素
                        int rowNum = pRrow.ItemArray.Length;
                        // 添加记录
                        for (int n = 1; n < rowNum + 1; n++)
                        {
                            row.set_Value(n, pRrow.ItemArray.GetValue(n - 1));
                            row.Store();
                        }
                    }
                    return true ;
                }
                catch (Exception ex)
                {
                    return false ;
                }
            }
    
    转:http://blog.csdn.net/comeonyangzi/article/details/20611443
  • 相关阅读:
    高可用测试二
    sync包测试代码
    element 中 input设置了type="number"还能输入e和负数的问题如何解决?
    git添加rsa ssh key后仍提示Permission denied (publickey)解决方法
    nginx 反向代理跨域
    SAP ABAP MDG相关事务码 摘录
    其他23防抖
    Python内置函数:index
    Python内置函数:enumerate
    MySQL查看表占用空间大小
  • 原文地址:https://www.cnblogs.com/gisoracle/p/8963918.html
Copyright © 2020-2023  润新知