Mai mult

Fac o selecție cu ArcObjects, există o problemă cu iSelectionSet: AddList sau am o eroare undeva?

Fac o selecție cu ArcObjects, există o problemă cu iSelectionSet: AddList sau am o eroare undeva?


Colectez un set de OID-uri într-o matrice OID (lungă), acest lucru se întâmplă într-o buclă și dacă găsesc un OID pe care vreau să-l adaug la matrice, REDIM PRESERVE pentru a extinde matricea.

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

Odată ce folosesc această matrice pentru a face selecția mea prin iFeatureSelection.SelectionSet.AddList nu există nicio eroare, dar o selecție rezultată este complet greșită. În loc să obțineți 89 de înregistrări așteptate, tabelul de atribute raportează 40 este selectat, dar numai aproximativ 10 înregistrări sunt selectate fizic pe ecran și în tabelul de atribute (a se vedea figura 1)

NU FUNCȚIONEAZĂ CORECT:

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

Cu toate acestea, când folosesc în schimb o buclă For Next și adaug individual OID-urile, obțin exact ceea ce mă aștept: 89 de înregistrări. (vezi figura 2)

MERGE BINE:

For i = 0 To iOIDListCount - 1 pFeatureSelection.SelectionSet.Add (iOIDList (i)) Next i

Figura 1 - Rezultat de selecție incorect atunci când se utilizează abordarea AddList

Figura 2 - Rezultatul selecției COrect atunci când se utilizează abordarea Adăugare (individual în buclă)


Se pare că nu mai puteți avea încredere în ISelectionSet.AddList, conform documentului de ajutor:

Această metodă nu trebuie apelată de aplicațiile .NET sau Java. În schimb, apelați la IGeoDatabaseBridge2.AddList.
[C #]
Această metodă nu trebuie utilizată în .NET. În schimb, utilizați IGeoDatabaseBridge2.AddList.
[Visual Basic .NET]
Această metodă nu trebuie utilizată în .NET. În schimb, utilizați IGeoDatabaseBridge2.AddList.

Care indică utilizarea IGeoDatabaseBridge2.AddList pe care nu găsesc niciun exemplu, dar se pare că merge pe acest drum:

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList (iOIDListCount) iOIDList (iOIDListCount - 1) = pRow.OID Debug.Print (iOIDList (iOIDListCount - 1)) dim pGDBridge ca pachetDigest )

Priveste filmarea: Nicolae Guta si Blondu de la Timisoara - Omule unde te duci oficial video hit 2017