1、获取图层字段
Dim pTable As ITable = pLayer Dim pField As IField For i As Integer = 0 To pTable.Fields.FieldCount - 1 pField = pTable.Fields.Field(i) Next
2、布局视图中的Element分离和合并
Private Sub PartEleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PartEleMenuItem.Click Dim graphicsContainer As IGraphicsContainer = TryCast(PageLayoutPrint.ActiveView, IGraphicsContainer) Dim pGraphContSel As IGraphicsContainerSelect = TryCast(graphicsContainer, IGraphicsContainerSelect) pGraphContSel.UnselectAllElements() Dim pGroupEle As IGroupElement = Right_MenuStrip.Tag If IsNothing(pGroupEle) Then Exit Sub For i As Integer = 0 To pGroupEle.ElementCount - 1 Dim pElement As IElement = pGroupEle.Element(i) pGraphContSel.SelectElement(pElement) graphicsContainer.AddElement(pElement, 0) Next Right_MenuStrip.Tag = Nothing PageLayoutPrint.ActiveView.Refresh() End Sub '合并Element Private Sub MargerEleMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MargerEleMenuItem.Click Dim graphicsContainer As IGraphicsContainer = TryCast(PageLayoutPrint.ActiveView, IGraphicsContainer) Dim pGraphContSel As IGraphicsContainerSelect = TryCast(graphicsContainer, IGraphicsContainerSelect) Dim pGroupEle As IGroupElement = New GroupElement() For i As Integer = 0 To pGraphContSel.ElementSelectionCount - 1 pGroupEle.AddElement(pGraphContSel.SelectedElement(i)) Next pGraphContSel.UnselectAllElements() Dim pElement As IElement = CType(pGroupEle, IElement) graphicsContainer.AddElement(pElement, 0) pGraphContSel.SelectElement(pElement) PageLayoutPrint.ActiveView.Refresh() End Sub
效果如下图:
合并前:
合并后:
3、批量修改字段值
VB
''' <summary> ''' 字段值更新,将Int型的字段值转换成date类型的字段值 ''' </summary> ''' <param name="pFeatureLayer">需要转换的图层</param> ''' <returns></returns> ''' <remarks></remarks> Private Function UpdateFieldValue(ByVal pFeatureLayer As IFeatureLayer) Dim pFeatureClass As IFeatureClass = pFeatureLayer.FeatureClass
Dim pFeatureCursor As IFeatureCursor = pFeatureClass.Search(Nothing, False) Dim pFeature As IFeature = pFeatureCursor.NextFeature() While Not IsNothing(pFeature) Dim timevalue As String = pFeature.Value(6).ToString() & "/01/01" '这里的字段索引固定 Dim time As DateTime = CType(timevalue, DateTime) pFeature.Value(19) = time '这里的字段索引固定 pFeature.Store() pFeature = pFeatureCursor.NextFeature() End While System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor) End Function
C#
/// <summary> /// 字段值更新根据字段名 /// </summary> /// <param name="pFeatureLayer">要素图层</param> /// <param name="fieldName">字段名</param> private void UpdateFieldValue(IFeatureLayer pFeatureLayer,string fieldName) { IFeatureClass pFeatureClass =pFeatureLayer.FeatureClass; IFeatureCursor pFeatureCursor = pFeatureClass.Search(null, false); IFeature pFeature = pFeatureCursor.NextFeature(); while(pFeature!=null) { pFeature.set_Value(pFeatureClass.FindField(fieldName), 70); pFeature.Store(); pFeature = pFeatureCursor.NextFeature(); } System.Runtime.InteropServices.Marshal.ReleaseComObject(pFeatureCursor); }
4、ImageComboBoxEdit 加载字段
Friend WithEvents cboLayerList As DevExpress.XtraEditors.ImageComboBoxEdit
Private Sub AddLayer() cboLayerList.Properties.Items.Clear() For i As Integer = 0 To m_AssetApplication.MainMapCon.LayerCount - 1 Dim icbi As ImageComboBoxItem = New ImageComboBoxItem Dim pLayer As ILayer = m_AssetApplication.MainMapCon.get_Layer(i) icbi.Description = pLayer.Name icbi.Value = pLayer cboLayerList.Properties.Items.Add(icbi) Next cboLayerList.EditValue = m_AssetApplication.MainMapCon.get_Layer(0) End Sub
5、图层查询 IFeatureSelection
Protected Overridable Function QueryByType(ByVal querystring As String) As Boolean Dim pQueryFilter As IQueryFilter = New QueryFilter pQueryFilter.WhereClause = querystring Dim pFeatureLayer As IFeatureLayer = tmpLayer Dim pSelection As IFeatureSelection = pFeatureLayer If CheckSearchFromSelection.Checked Then '从选择集中查询数据 pSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultAnd, False) Else ‘从图层中查询数据 m_AssetApplication.MainMapCon.Map.ClearSelection() '清空选择集 pSelection.SelectFeatures(pQueryFilter, esriSelectionResultEnum.esriSelectionResultNew, False) End If If pSelection.SelectionSet.Count = 0 Then MessageBox.Show("查询结果为空!") Return True End If Return False End Function
6、查询删除数据
Dim pQueryFilter As IQueryFilter = New QueryFilter() pQueryFilter.WhereClause = PointId & " in (" & ids & ")" 'ids='1','2' Dim pTable As ITable = pPointFeaCs
pTable.DeleteSearchedRows(pQueryFilter)
7、添加REST服务地址
Dim pRestLayer As IMapServerRESTLayer = New MapServerRESTLayer pRestLayer.Connect("http://172.0.0.1:7080/PBS/rest/services/MyPBSService1/MapServer") pMap.AddLayer(pRestLayer)