DevExpress实现仿ArcMap属性表 --属性编辑

这篇博客详细介绍了如何在ArcEngine环境下开发属性表的编辑功能,包括启动和停止编辑,控制特定字段的编辑权限,以及在单元格值改变时如何同步更新到要素。在编辑过程中,使用IEngineEditor类进行操作,并确保在修改后调用StartOperation和StopOperation以保存编辑。此外,还提到了与ArcMap编辑体验的相似性,强调了编辑内容需保存后才能真正更新到要素类。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

属性表的编辑功能开发

首先获取 IEngineEditor类,添加静态字段

public static IEngineEditor m_EngineEditor = new EngineEditorClass();

可使用此字段控制ArcEngine的编辑功能 开始编辑 保存编辑 撤回编辑 停止编辑等。

1.通过GridView的.ShowingEditor事件控制属性表允许编辑的字段

 private void gvStartEdit(object sender, CancelEventArgs e)
        {
            GridView gv = (GridView)sender;
            //图层是否可编辑
            IEngineEditor m_engineEditor = new EngineEditorClass();
            IEngineEditLayers m_engineLayersEditor = m_engineEditor as IEngineEditLayers;
            IFeatureLayer key = null;
            key = gv.Tag as IFeatureLayer;   //获取GridView对应的要素图层
            if (!m_engineLayersEditor.IsEditable(key))  //判断当前GridView的图层是否开启了编辑
            {
                e.Cancel = true; //没有开始就取消编辑事件
                return;
            }
            //禁止编辑字段列表
            System.Collections.Generic.List<string> ProhibitEditField = new System.Collections.Generic.List<string> { "OBJECTID", "FID", "Shape" };
            if (ProhibitEditField.Contains(gv.FocusedColumn.FieldName))
            {
                e.Cancel = true;  //当前点击的字段在禁止列表中就取消编辑事件
            }
        }

2.通过GridView.CellValueChanged事件 在单元格被修改时将修改同步到对应的要素中去
使用AxToolbarControl的编辑工具时,修改时必须使用IEngineEditor.StartOperation()和 mainMap.m_EngineEditor.StopOperation()
否则停止编辑时,不会弹出是否要保存的提示框。

 mainMap.m_EngineEditor.StartOperation();
            GridView gv = (GridView)sender;
            Attribute Ab = mainMap.LayerAttributeDict[gv.Tag as IFeatureLayer];
            int Oid = int.Parse(gv.GetRowCellValue(e.RowHandle, this.oidFieldName).ToString());
            string ColumnName = e.Column.FieldName;
            string Value = e.Value.ToString();
            ITable table = (gv.Tag as IFeatureLayer).FeatureClass as ITable;
            IRow row = table.GetRow(Oid);
            row.Value[table.FindField(ColumnName)] = Value;
            row.Store();
            mainMap.m_EngineEditor.StopOperation("属性修改");
            RowAndCol pRowAndCol = new RowAndCol();  ///用来保存修改的记录  然后同步记录到没有修改的GridView
            pRowAndCol.Oid = Oid;
            pRowAndCol.Column = this.fieldIndex[e.Column.FieldName];
            pRowAndCol.Value = Value;

            /// UpdateGvEdit  一个将修改同步到 DataTable的方法
            if (Ab.IsShowAll == false)
            {//当前修改在 显示所选记录
                UpdateGvEdit(Ab.GridControlForAll.DataSource as DataTable, pRowAndCol);
            }
            else
            {
                UpdateGvEdit(Ab.GridControlForSelect.DataSource as DataTable, pRowAndCol);
            }

和ArcMap一样修改的内容需要保存编辑后才能真正保存到要素类

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值