/// <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 = ; 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 = ; 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 = ;
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(, 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(, 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(, pField2);
#endregion
ShapefileWorkspaceFactoryClass class2 = new ShapefileWorkspaceFactoryClass();
ESRI.ArcGIS.Geodatabase.IWorkspace pWorkspace = class2.OpenFromFile(tempPath, );
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=;k<count ;k++)
{
//ITable 的记录
IRow row = pTable.CreateRow(); DataRow pRrow=mTable .Rows[k];
//列元素
int rowNum= pRrow .ItemArray.Length; // 添加记录
for (int n=;n<rowNum+ ;n++)
{
row.set_Value(n,pRrow.ItemArray.GetValue(n-));
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 = ;
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(, 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(, 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(, 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, );
IFeatureWorkspace pFWS = pWorkspace as IFeatureWorkspace;
//删除已有的
if (System.IO.File.Exists(tempPath))
{
System.IO.File.Delete(tempPath);
}
fileName = fileName.Split('.')[];
//创建空表
ESRI.ArcGIS.Geodatabase.ITable pTable;
pTable = pFWS.CreateTable(fileName, fieldsEdit, null, null, "");
//获取表中记录数
int count = mTable.Rows.Count;
//转换为ITable中的数据
for (int k = ; k < count; k++)
{
//ITable 的记录
IRow row = pTable.CreateRow(); DataRow pRrow = mTable.Rows[k];
//列元素
int rowNum = pRrow.ItemArray.Length;
// 添加记录
for (int n = ; n < rowNum + ; n++)
{
row.set_Value(n, pRrow.ItemArray.GetValue(n - ));
row.Store();
}
}
return true ;
}
catch (Exception ex)
{
return false ;
}
} 转:http://blog.csdn.net/comeonyangzi/article/details/20611443

【转载】ArcEngine ITable 与System.DataTable相互转换的更多相关文章

  1. 【转载】C#如何获取DataTable中某列的数据类型

    在C#的数据表格DataTable的操作中,有时候因为业务需要,我们需要获取到DataTable所有列或者某一列的数据类型,此时我们可以通过DataTable中的Columns属性对象的DataTyp ...

  2. XML IList<T> TO DataSet TO DataTable 相互转换

    //遍历XML 获得 DataSet //XmlTextReader static void Main(string[] args) { string xmlData = @"D:\stud ...

  3. List泛型与DataTable相互转换

    public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...

  4. 【全文转载】Gradle、Maven项目相互转换

    Doublemine 首页 标签 归档 关于 搜索   Gradle.Maven项目相互转换  发表于 2017-08-21 |  更新于: 2018-03-18 |  阅读次数: 920  字数统计 ...

  5. [转载]未能从程序集“System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35”中加载类型“System.Web.WebPages.DisplayModeProvider”

    转载于http://bkcoding.cn/post_1210.html 使用vs2010开发asp.net mvc程序时,出现 未能从程序集“System.Web.WebPages, Version ...

  6. XML与DataTable相互转换

    1.DataTable转XML #region DataTableToXml /// <summary> /// 将DataTable对象转换成XML字符串 /// </summar ...

  7. 【转载】C#手动往DataTable中末尾新增一行数据

    在C#中的Datatable数据变量的操作过程中,需要手动往DataTable变量的末尾新增一行数据,例如一个实际的例子,我们做数据报表,在最后一行可能需要新增一行DataRow数据作为一个汇总记录, ...

  8. 【转载】C#通过遍历DataTable的列获取所有列名

    在C#中的Datatable数据变量的操作过程中,可以通过遍历DataTable的所有列对象Columns属性,来获取DataTable中的所有列名信息,DataTable中所有列的对象信息都存储在D ...

  9. 【转载】C#如何往DataTable中新增一个数据列

    在C#中的Datatable数据变量的操作过程中,有时候我们需要往现有的DataTable中新增一个自定义数据列,该列在原有的DataTable变量中并不存在,属于用户手工自定义新增的数据列,在往Da ...

随机推荐

  1. Axure RP Pro 7.0

    Axure RP Pro专为Rapid Prototype Design而生,它可以辅助产品经理快速设计完整的产品原型,并结合批注.说明以及流程图.框架图等元素将产品完整地表述给各方面设计人员,如UI ...

  2. postman发送json请求,使用案例

    介绍:  postman是一个很好的http模拟器,,可以发送get.post.put等各种请求,是测试服务接口相当好的工具. postman发送json请求,使用案例 发送json的具体步骤: 1. ...

  3. spring-mvc集成 swagger

    问题1:spring-mvc集成 swagger, 配置好后界面 404, 原因: dispatcher-servlet.xml 文件中, 要在这上面 <!-- 启用spring mvc 注解 ...

  4. _findfirst和_findnext

    1.首先是_finddata结构体,用于存储文件信息的结构体. 2._findfirst函数:long _findfirst(const char *, struct _finddata_t *); ...

  5. hdu 5441 (2015长春网络赛E题 带权并查集 )

    n个结点,m条边,权值是 从u到v所花的时间 ,每次询问会给一个时间,权值比 询问值小的边就可以走 从u到v 和从v到u算不同的两次 输出有多少种不同的走法(大概是这个意思吧)先把边的权值 从小到大排 ...

  6. C++ 编程错误记录

    C3646 未知重写说明符 两个头文件相互引用造成的问题

  7. 【AtCoder】ARC085

    C - HSI 题解 \(E = 1900 * (N - M) + 100 * M + \frac{1}{2^{M}} E\) \(E = 2^{M}(1900 * (N - M) + 100 * M ...

  8. 1195: [HNOI2006]最短母串

    思路:好像以前谁问过我这题...  状个压就好啦, 把包含在其他串中的字符串删掉, 预处理除每两个字符串之间的关系, dp[ state ][ i ] 表示在state的状态下, 最后一个字符串是第i ...

  9. 查看浏览器中Cookie信息

    一般在浏览器的设置中能找到Cookie的相关设置和查看信息 在js中使用 alert(document.cookie) 也能查看到当前页面的 Cookie 信息实现方式1.若是自己开发的页面 直接在j ...

  10. 循序渐进学.Net Core Web Api开发系列【13】:中间件(Middleware)

    系列目录 循序渐进学.Net Core Web Api开发系列目录 本系列涉及到的源码下载地址:https://github.com/seabluescn/Blog_WebApi 一.概述 本篇介绍如 ...