Mehr

Ich treffe eine Auswahl mit ArcObjects, gibt es ein Problem mit iSelectionSet:AddList oder habe ich irgendwo einen Fehler?


Ich sammle eine Reihe von OIDs in einem OID-Array (lang), dies geschieht in einer Schleife und wenn ich eine OID finde, die ich dem Array hinzufügen möchte, REDIM PRESERVE, um das Array zu erweitern.

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

Sobald ich dieses Array verwende, um meine Auswahl über iFeatureSelection.SelectionSet.AddList zu treffen es liegt kein Fehler vor, aber die resultierende Auswahl ist völlig falsch. Anstatt die erwarteten 89 Datensätze zu erhalten, meldet die Attributtabelle 40 ausgewählte Datensätze, aber nur etwa 10 Datensätze sind physisch auf dem Bildschirm und in der Attributtabelle ausgewählt (siehe Abbildung 1)

NICHT KORREKT FUNKTIONIEREN:

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

Wenn ich jedoch stattdessen eine For Next-Schleife verwende und die OIDs einzeln hinzufüge, erhalte ich genau das, was ich erwarte: 89 Datensätze. (siehe Abbildung 2)

FUNKTIONIERT GUT:

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

Abbildung 1 - Falsches Auswahlergebnis bei Verwendung des AddList-Ansatzes

Abbildung 2 - Korrektes Auswahlergebnis bei Verwendung des Ansatzes Hinzufügen (individuell in einer Schleife)


Es scheint, dass Sie der ISelectionSet.AddList laut Hilfedokument nicht mehr vertrauen können:

Diese Methode sollte nicht von .NET- oder Java-Anwendungen aufgerufen werden. Rufen Sie stattdessen IGeoDatabaseBridge2.AddList auf.
[C#]
Diese Methode sollte in .NET nicht verwendet werden. Verwenden Sie stattdessen IGeoDatabaseBridge2.AddList.
[Visual Basic .NET]
Diese Methode sollte in .NET nicht verwendet werden. Verwenden Sie stattdessen IGeoDatabaseBridge2.AddList.

Welche weist an, IGeoDatabaseBridge2.AddList zu verwenden, für die ich keine Beispiele finden kann, aber es sieht so aus:

iOIDListCount = iOIDListCount + 1 ReDim Preserve iOIDList(iOIDListCount) iOIDList(iOIDListCount - 1) = pRow.OID Debug.Print(iOIDList(iOIDListCount - 1)) dim pGDBridge as IGeoDatabaseBridge2 = New )


Schau das Video: Making a new polygon shapefile in ArcMap (Oktober 2021).