【轉載】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
相關文章
相關標籤/搜索