博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
AE属性表操作
阅读量:6476 次
发布时间:2019-06-23

本文共 3731 字,大约阅读时间需要 12 分钟。

转自原文

实现的操作包括:1、打开属性表;2、编辑属性表;3、增加属性列;4、数据排序;5、字段计算……

嗯,实现的功能目前就这些吧,后续还会继续跟进,还望大家多多关注……下面就分功能说说我的实现方式吧……
1、打开属性表

属性表的打开是在TOC的右键菜单中打开的,首先新建一个类OpenAttribute,继承BaseCommand,OpenAttribute类的源码如下:

 

using System;  using System.Collections.Generic;  using System.Linq;  using ESRI.ArcGIS.ADF.BaseClasses;  using ESRI.ArcGIS.Controls;    namespace MapDemo  {      public sealed class OpenAttribute : BaseCommand      {          IMapControl3 m_mapControl;          AxMapControl _MapControl;            public OpenAttribute(AxMapControl pMapControl)          {              base.m_caption = "查看属性表";              _MapControl = pMapControl;          }            public override void OnClick()          {              formTable formtable = new formTable(_MapControl, m_mapControl);              formtable.Show();            }            public override void OnCreate(object hook)          {              m_mapControl = (IMapControl3)hook;          }      }  }

 

解释一下,AxMapControl参数是为了后面属性表操作时刷新视图的。接着在toc右键事件中添加代码:

m_menuLayer.AddItem(new OpenAttribute(mapMain), -1, 2, false, esriCommandStyles.esriCommandStyleIconAndText); 

 

如此这般,这般如此,我们期待的属性表就出现了,效果呢比较丑陋,莫怪莫怪……

属性表打开之后呢,大家就看到了有关属性表操作的一些功能了,不过呢,属性表的大开的工作还尚未完成。接下来呢,添加如下引用:

 完了之后,定义一下变量:

    1. AxMapControl _MapControl;  
    2.         IMapControl3 m_mapControl;  
    3.         public DataTable dt2;          
    4.         ITableSort pTs;//处理排序  
    5.         bool up = true;  
    6.         int row_index = 0;  
    7.         int col_index = 0;  
    8.         public string strAddField = "";  
    9.         RowAndCol[] pRowAndCol = new RowAndCol[10000];  
    10.         int count = 0;  

这个窗口的参数为:

public formTable(AxMapControl pMapControl,IMapControl3 pMapCtrl)  {      InitializeComponent();      _MapControl = pMapControl;      m_mapControl = pMapCtrl;  }

这样,下面就可以显示属性了,在form_load事件中写如下代码:

TableShow(); 

此处,调用了TableShow方法,TableShow的代码如下:

 
View Code

这样呢,属性表的显示就完成了。

2、新增字段
先看看那个“新增字段”按钮的事件吧……

ILayer pLayer = (ILayer)m_mapControl.CustomProperty; 

IFeatureLayer pFLayer = pLayer as IFeatureLayer; 

formAddField formaddfield = new formAddField(pFLayer, gdvAttribute); 

formaddfield.Show(); 

此处,调用了窗体formAddField ,传递的参数是IFeatureLayer pFLayer 和DataGridView gdvAttribute,那么,下面看看formAddField的设计以及实现

界面呢也是比较简单,看看formAddField 的代码:

 
View Code

首先,在窗体加载的时候将数据类型添加进去,之后在类型选择改变时触发其属性控制控件的显示或者改变,接下来就是最重要的添加字段了,大家注意到了,在this.Close()之后,还调用了RefreshTable 的Refresh方法,传递的参数是datagridview _dgv和Ifeaturelayer _FeatureLayer,Refresh方法主要是实现添加自断后显示的刷新,由于后面还有涉及到,所以,这个后面一并说。

3、编辑属性并保存
还是先看看那两个按钮的时间吧:

 
View Code

在保存属性表的时候,出现了pRowAndCol,对他的定义如下:

 
View Code

4、删除选择

顾名思义,就是删除选择的行,这里的选择可以是多选,也可是单选,看看对应按钮的事件吧:

private void toolDelSelect_Click(object sender, EventArgs e)  {      if (((MessageBox.Show("确定要删除吗", "警告", MessageBoxButtons.YesNo)) == DialogResult.Yes))      {          ILayer pLayer = (ILayer)m_mapControl.CustomProperty;          IFeatureLayer pFLayer = pLayer as IFeatureLayer;          ITable pTable = pFLayer as ITable;          IRow pRow = pTable.GetRow(row_index);          pRow.Delete();          TableShow();          MessageBox.Show("删除成功!", "提示", MessageBoxButtons.OK);          _MapControl.ActiveView.Refresh();      }  }

此处,看看下面这个事件:

private void gdvAttribute_CellValueChanged(object sender, DataGridViewCellEventArgs e)  {      //记录值一旦改变触发此事件      //在dataGridView中获取改变记录的行数,列数和记录值      pRowAndCol[count].Row = gdvAttribute.CurrentCell.RowIndex;      pRowAndCol[count].Column = gdvAttribute.CurrentCell.ColumnIndex;      pRowAndCol[count].Value = gdvAttribute.Rows[gdvAttribute.CurrentCell.RowIndex].Cells[gdvAttribute.CurrentCell.ColumnIndex].Value.ToString();      count++;  }

5、导出Excel
首先得添加程序对Microsoft.Office.Interop.Excel的引用,添加完成之后方可导出:

 
View Code

 

 

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。
    本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/6262332.html
,如需转载请自行联系原作者
你可能感兴趣的文章
Linux经常使用命令(十六) - whereis
查看>>
插件编译 版本问题
查看>>
android中TextView的阴影设置
查看>>
core dump相关
查看>>
Linux五种IO模型
查看>>
Bootstrap技术: 模式对话框的使用
查看>>
小知识,用myeclipes找jar
查看>>
in-list expansion
查看>>
设计原则(四):接口隔离原则
查看>>
基于react的滑动图片验证码组件
查看>>
iOS快速清除全部的消息推送
查看>>
java单例模式深度解析
查看>>
【学习笔记】阿里云Centos7.4下配置Nginx
查看>>
VuePress手把手一小時快速踩坑
查看>>
dnsmasq安装使用和体验
查看>>
学习constructor和instanceof的区别
查看>>
Vijos P1881 闪烁的星星
查看>>
ABP理论学习之领域服务
查看>>
Qt 控制watchdog app hacking
查看>>
让所有IE支持HTML5的解决方案
查看>>