【转载】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 = ; 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相互转换的更多相关文章
- 【转载】C#如何获取DataTable中某列的数据类型
在C#的数据表格DataTable的操作中,有时候因为业务需要,我们需要获取到DataTable所有列或者某一列的数据类型,此时我们可以通过DataTable中的Columns属性对象的DataTyp ...
- XML IList<T> TO DataSet TO DataTable 相互转换
//遍历XML 获得 DataSet //XmlTextReader static void Main(string[] args) { string xmlData = @"D:\stud ...
- List泛型与DataTable相互转换
public static class ExtensionMethods{/// <summary>/// 将List转换成DataTable/// </summary>/// ...
- 【全文转载】Gradle、Maven项目相互转换
Doublemine 首页 标签 归档 关于 搜索 Gradle.Maven项目相互转换 发表于 2017-08-21 | 更新于: 2018-03-18 | 阅读次数: 920 字数统计 ...
- [转载]未能从程序集“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 ...
- XML与DataTable相互转换
1.DataTable转XML #region DataTableToXml /// <summary> /// 将DataTable对象转换成XML字符串 /// </summar ...
- 【转载】C#手动往DataTable中末尾新增一行数据
在C#中的Datatable数据变量的操作过程中,需要手动往DataTable变量的末尾新增一行数据,例如一个实际的例子,我们做数据报表,在最后一行可能需要新增一行DataRow数据作为一个汇总记录, ...
- 【转载】C#通过遍历DataTable的列获取所有列名
在C#中的Datatable数据变量的操作过程中,可以通过遍历DataTable的所有列对象Columns属性,来获取DataTable中的所有列名信息,DataTable中所有列的对象信息都存储在D ...
- 【转载】C#如何往DataTable中新增一个数据列
在C#中的Datatable数据变量的操作过程中,有时候我们需要往现有的DataTable中新增一个自定义数据列,该列在原有的DataTable变量中并不存在,属于用户手工自定义新增的数据列,在往Da ...
随机推荐
- 局域网搭建https局域网
局域网搭建https局域网 1.使用tomcat作为服务器搭建局域网访问https 需要使用java jdk\bin下的keytool.exe来创建证书 使用命令:keytool -genkenpai ...
- Java 把异常传递给控制台
最简答而又不用写多少代码就能保护异常信息的方法,就是把它们从main()传递到控制台,对于简单的程序可以像这样: package exceptions; //: exceptions/MainExce ...
- OCR识别-python3.5版
刚接触,啥子都不会,按着教程走 需求:识别图片中的文字信息环境:windows系统 开发语言:python3.5 使用工具类:1.pyocr 2.PIL 3.tesseract-ocr 步骤: 1.p ...
- final修饰的地址不能被修改
package final0; /* * 顾客 */public class Customer { // 属性 String name; int age; // 父类object的方法 public ...
- Spring对象依赖关系处理
Spring中给对象属性赋值 1.通过set方法给属性注入值 2.p名称空间 3.自动装配 4.注解 编写MVCModel调用userAction MVCModel public class MVCM ...
- 优雅的vue.js
优雅的vue.js代码 https://www.cnblogs.com/zhengrunlin/p/9164951.html watch 与 computed 的巧妙结合 如上图,一个简单的列表页面. ...
- gym 101986
A - Secret of Chocolate Poles 队友写的. 好像水水的. //#pragma GCC optimize(2) //#pragma GCC optimize(3) //#pr ...
- 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]
题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...
- canvas入门级小游戏《开关灯》思路讲解
游戏很简单,10行10列布局,每行每列各10盏灯,游戏初始化时随机点亮其中一些灯,点击某盏灯,其上下左右的灯及本身状态反转,如果点击前是灭着的,点击后即点亮,将所有灯全部点亮才算过关.游戏试玩: 下面 ...
- AFO 我的oi生涯 大结局
今儿个哥几个一屋子退役了,这两天也许会写一个生涯大结局留作纪念吧. 今天就写了吧. 由于在机房的原因比一般同学获得的知识更多一些.进来总是看新闻,感慨颇多.自从两会开的第一天起,我就对我们政府采取的一 ...