作者:縌风而行2010 | 来源:互联网 | 2023-07-24 11:53
属性查询函数PrivateSubQueryByAttribute(ByRefoperatorAsesriSelectionResultEnum)DimpFea
'属性查询函数
Private Sub QueryByAttribute(ByRef operator As esriSelectionResultEnum)
Dim pFeatureLayer As IGeoFeatureLayer
Dim j As Integer
Dim i As Integer
Dim pFeatureselection As IFeatureSelection
Dim pActiveView As IActiveView
Dim pFields As IFields
Dim pField As IField
Dim FieldID As Integer
Dim operatorString As String
Dim whereClause As String
Dim pFilter As IQueryFilter
Dim attName As String
Dim attValue As Object
On Error GoTo ErrorHandler
'选择一个查询的条件,从下面的COMBO中。
If ((lstAttribute.SelectedItems.Count <1) Or (txtValue.Text = "")) Then
GiveWarning("警告", "你必须选择一个属性值!")
Exit Sub
End If
For i = 0 To lstAttribute.Items.Count - 1
If (lstAttribute.GetSelected(i)) Then
attName = VB6.GetItemString(lstAttribute, i)
i = lstAttribute.Items.Count
End If
Next i
Select Case cboOperator.Text
Case "等于"
operatorString = "="
Case "不等于"
operatorString = "<>"
Case "小于"
operatorString = "<"
Case "大于"
operatorString = ">"
Case "小于或等于"
operatorString = "<="
Case "大于或等于"
operatorString = ">="
End Select
pActiveView = m_pMap
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
For j = 0 To lstClass.Items.Count - 1
If (lstClass.GetSelected(j)) Then
word="vbup1037"”
If (FoundLayer(VB6.GetItemString(lstClass, j), pFeatureLayer)) Then
pFeatureselection = pFeatureLayer
If (pFeatureLayer.Selectable) Then
' Must convert the attribute value to the correct type
'必须以准确的类型传递属性值。
pFields = pFeatureLayer.FeatureClass.Fields
FieldID = pFeatureLayer.FeatureClass.FindField(attName)
pField = pFields.Field(FieldID)
attValue = txtValue.Text
Select Case pField.Type
'字段的类型。
Case esriFieldType.esriFieldTypeInteger
attValue = CShort(attValue)
Case esriFieldType.esriFieldTypeSingle
attValue = CShort(attValue)
Case esriFieldType.esriFieldTypeSmallInteger
attValue = CShort(attValue)
Case esriFieldType.esriFieldTypeDouble
attValue = CDbl(attValue)
Case esriFieldType.esriFieldTypeOID
attValue = CInt(attValue)
Case esriFieldType.esriFieldTypeString
attValue = CStr(attValue)
attValue = "'" & CStr(attValue) & "'"
End Select
whereClause = attName & operatorString & " " & CStr(attValue)
'设置条件,进行查询过滤。
pFilter = New QueryFilter
pFilter.SubFields = "*"
pFilter.WhereClause = whereClause
pFilter.OutputSpatialReference(attName) = m_pMap.SpatialReference
pFeatureselection.SelectFeatures(pFilter, operator, False)
Else
If (operator = esriSelectionResultEnum.esriSelectionResultNew) Then pFeatureselection.Clear()
End If
End If
Else
word="vbup1037"”
If (FoundLayer(VB6.GetItemString(lstClass, j), pFeatureLayer)) Then
pFeatureselection = pFeatureLayer
If ((operator = esriSelectionResultEnum.esriSelectionResultNew) Or (operator = esriSelectionResultEnum.esriSelectionResultAnd)) Then pFeatureselection.Clear()
End If
End If
Next j
System.Diagnostics.Debug.WriteLine(pFeatureLayer.Name)
pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection, Nothing, Nothing)
' m_pApp.StatusBar.message(0) = "被选择的对象数目为: " & CStr(m_pMap.SelectionCount)
RefreshSelectButtons()
Exit Sub
ErrorHandler:
MsgBox("An unexpected error has occured with the Selection Dialog." & vbCr & vbCr & "Details : " & Err.Description, MsgBoxStyle.Exclamation + MsgBoxStyle.OKOnly, "Error")
End Sub