Mais

Estou fazendo uma seleção com ArcObjects. Há um problema com iSelectionSet: AddList ou há um erro em algum lugar?


Eu coleto um conjunto de OIDs em uma matriz OID (longa), isso acontece em um loop e se eu encontrar um OID que desejo adicionar à matriz, REDIM CONSERVO para expandir a matriz.

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList (iOIDListCount) iOIDList (iOIDListCount - 1) = pRow.OID Debug.Print (iOIDList (iOIDListCount - 1))

Depois de usar essa matriz para fazer minha seleção por meio de iFeatureSelection.SelectionSet.AddList não há erro, mas a seleção resultante está completamente errada. Em vez de obter os 89 registros esperados, a tabela de atributos está relatando que 40 são selecionados, mas apenas cerca de 10 registros são selecionados fisicamente na tela e na tabela de atributos (ver figura 1)

NÃO FUNCIONA CORRETAMENTE:

pFeatureSelection.SelectionSet.AddList (iOIDListCount, iOIDList (0))

No entanto, quando eu uso um loop For Next e adiciono os OIDs individualmente, obtenho exatamente o que espero: 89 registros. (veja a figura 2)

FUNCIONA BEM:

Para i = 0 Para iOIDListCount - 1 pFeatureSelection.SelectionSet.Add (iOIDList (i)) Próximo i

Figura 1 - Resultado de seleção incorreto ao usar a abordagem AddList

Figura 2 - Resultado da seleção correta ao usar a abordagem Adicionar (individualmente em um loop)


Parece que você não pode mais confiar no ISelectionSet.AddList, de acordo com o documento de ajuda:

Este método não deve ser chamado por aplicativos .NET ou Java. Em vez disso, chame IGeoDatabaseBridge2.AddList.
[C #]
Este método não deve ser usado em .NET. Em vez disso, use IGeoDatabaseBridge2.AddList.
[Visual Basic .NET]
Este método não deve ser usado em .NET. Em vez disso, use IGeoDatabaseBridge2.AddList.

Que instrui a usar IGeoDatabaseBridge2.AddList, do qual não consigo encontrar nenhum exemplo, mas parece que funciona assim:

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList (iOIDListCount) iOIDList (iOIDListCount - 1) = pRow.OID Debug.Print (iOIDList (iOIDListCount - 1)) dim pGistDridge como IGeoDatabaseClureBrection2 (iOIDListCount - 1)) dim pGistidgeDatabaseHAdatabaseGatabaseSdatabaseSAddBelection2 (pGDBridgeSAdatabaseHAddatabaseSAddBelectionSAddBelection2HAddatabaseSAddBelection2. )