2022年ArcGIS_Engine+C#_属性数据表的查询 .pdf
《2022年ArcGIS_Engine+C#_属性数据表的查询 .pdf》由会员分享,可在线阅读,更多相关《2022年ArcGIS_Engine+C#_属性数据表的查询 .pdf(7页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ArcGIS Engine+C#_ 属性数据表的查询显示2012 年 06 月 19 日 星期二 14:33 本讲的思路大体如下:首先根据图层属性中的字段创建一个空的DataTable ,然后根据数据内容一行行填充DataTable 数据,再将DataTable 绑定到 DataGridView控件,最后调用并显示属性表窗体。1. 创建属性表窗体新建一个Windows 窗体,命名为“AttributeTableFrm.cs”。从工具箱拖一个DataGridView控件到窗体,并将其Dock 属性设置为“Fill”。添加如下引用:using ESRI.ArcGIS.Carto; using ES
2、RI.ArcGIS.Controls; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Geodatabase; 2. 创建空 DataTable 首先传入ILayer , 再查询到ITable , 从 ITable中的 Fileds中获得每个Field , 再根据 Filed设置 DataTable 的 DataColumn, 由此创建一个只含图层字段的空DataTable 。 实现函数如下:/ / 根据图层字段创建一个只含字段的空D
3、ataTable / / / / private static DataTable CreateDataTableByLayer(ILayer pLayer, string tableName) / 创建一个DataTable 表DataTable pDataTable = new DataTable(tableName); / 取得 ITable接口ITable pTable = pLayer as ITable; IField pField = null; DataColumn pDataColumn; / 根据每个字段的属性建立DataColumn 对象for (int i = 0; i
4、 pTable.Fields.FieldCount; i+) pField = pTable.Fields.get_Field(i); / 新建一个DataColumn 并设置其属性pDataColumn = new DataColumn(pField.Name); if (pField.Name = pTable.OIDFieldName) pDataColumn.Unique = true;/字段值是否唯一 / 字段值是否允许为空名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1
5、 页,共 7 页 - - - - - - - - - pDataColumn.AllowDBNull = pField.IsNullable; / 字段别名pDataColumn.Caption = pField.AliasName; / 字段数据类型pDataColumn.DataType = System.Type.GetType(ParseFieldType(pField.Type); / 字段默认值pDataColumn.DefaultValue = pField.DefaultValue; / 当字段为String类型是设置字段长度if (pField.VarType = 8) pD
6、ataColumn.MaxLength = pField.Length; / 字段添加到表中pDataTable.Columns.Add(pDataColumn); pField = null; pDataColumn = null; return pDataTable; 因为 GeoDatabase 的数据类型与 .NET 的数据类型不同,故要进行转换。转换函数如下:/ / 将 GeoDatabase 字段类型转换成.Net 相应的数据类型/ / 字段类型 / public static string ParseFieldType(esriFieldType fieldType) switc
7、h (fieldType) case esriFieldType.esriFieldTypeBlob: return System.String; case esriFieldType.esriFieldTypeDate: return System.DateTime; case esriFieldType.esriFieldTypeDouble: return System.Double; case esriFieldType.esriFieldTypeGeometry: return System.String; case esriFieldType.esriFieldTypeGlobal
8、ID: return System.String; case esriFieldType.esriFieldTypeGUID: return System.String; case esriFieldType.esriFieldTypeInteger: return System.Int32; case esriFieldType.esriFieldTypeOID: return System.String; case esriFieldType.esriFieldTypeRaster: return System.String; case esriFieldType.esriFieldTyp
9、eSingle: return System.Single; case esriFieldType.esriFieldTypeSmallInteger: 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 7 页 - - - - - - - - - return System.Int32; case esriFieldType.esriFieldTypeString: return System.String; default: return System.String; 3
10、. 装载 DataTable 数据从上一步得到的DataTable 还没有数据, 只有字段信息。 因此, 我们要通过ICursor从 ITable中逐一取出每一行数据,即IRow。再创建DataTable 中相应的DataRow,根据 IRow 设置DataRow信息,再将所有的DataRow添加到 DataTable 中,就完成了DataTable 数据的装载。为保证效率,一次最多只装载2000 条数据到DataGridView 。函数代码如下: / / 填充 DataTable 中的数据/ / / / public static DataTable CreateDataTable(ILay
11、er pLayer, string tableName) / 创建空 DataTable DataTable pDataTable = CreateDataTableByLayer(pLayer, tableName); / 取得图层类型string shapeType = getShapeType(pLayer); / 创建 DataTable 的行对象DataRow pDataRow = null; / 从 ILayer查询到 ITable ITable pTable = pLayer as ITable; ICursor pCursor = pTable.Search(null, fal
12、se); / 取得 ITable中的行信息IRow pRow = pCursor.NextRow(); int n = 0; while (pRow != null) / 新建 DataTable 的行对象pDataRow = pDataTable.NewRow(); for (int i = 0; i pRow.Fields.FieldCount; i+) / 如果字段类型为esriFieldTypeGeometry,则根据图层类型设置字段值if (pRow.Fields.get_Field(i).Type = esriFieldType.esriFieldTypeGeometry) pDa
13、taRowi = shapeType; / 当图层类型为Anotation时,要素类中会有esriFieldTypeBlob类型的数据,/ 其存储的是标注内容,如此情况需将对应的字段值设置为Element else if (pRow.Fields.get_Field(i).Type = esriFieldType.esriFieldTypeBlob) pDataRowi = Element; 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 7 页 - - - - - -
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年ArcGIS_Engine+C#_属性数据表的查询 2022 ArcGIS_Engine 属性 数据表 查询
限制150内