How to query each feature layer


Summary This sample demonstrates how to iterate through a set of map resources in a Map control to query each feature layer.

If a layer returns features, they are included in a System.Data.DataTable (variable named "queryResultsDataTable") which is added to a single DataSet (variable named "queryResultsDataSet"). Note that the map resource type is non-specific, therefore any data source that supports queries can be used (e.g. ArcIMS, ArcGIS Server). The DataSet can then be used as a data source for a GridView to display a table of values in a Web page.
[C#]
System.Data.DataSet queryResultsDataSet = new System.Data.DataSet();

foreach (ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality gisFunctionality in
    Map1.GetFunctionalities())
{
    ESRI.ArcGIS.ADF.Web.DataSources.IGISResource gisResource =
        gisFunctionality.Resource;
    bool supported = gisResource.SupportsFunctionality(typeof
        (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality));

    if (supported)
    {
        ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality queryFunctionality = 
            (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)
            gisResource.CreateFunctionality(typeof
            (ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), null);

        string[] layerIDs = null;
        string[] layerNames = null;
        queryFunctionality.GetQueryableLayers(null, out layerIDs, out layerNames);

        ESRI.ArcGIS.ADF.Web.Geometry.Envelope adfEnvelope = new
            ESRI.ArcGIS.ADF.Web.Geometry.Envelope( - 120, 30,  - 100, 40);

        ESRI.ArcGIS.ADF.Web.SpatialFilter spatialFilter = new
            ESRI.ArcGIS.ADF.Web.SpatialFilter();
        spatialFilter.Geometry = adfEnvelope;
        spatialFilter.ReturnADFGeometries = true;
        spatialFilter.MaxRecords = 1000;

        for (int index = 0; index < layerIDs.Length; index++)
        {
            System.Data.DataTable queryResultsDataTable = queryFunctionality.Query
                (gisFunctionality.Name, layerIDs[index], spatialFilter);
            queryResultsDataTable.TableName = gisResource.Name + "_" +
                layerNames[index];
            queryResultsDataSet.Tables.Add(queryResultsDataTable);
        }
    }
}
[VB.NET]
Dim queryResultsDataSet As System.Data.DataSet = New System.Data.DataSet()

For Each gisFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IGISFunctionality In Map1.GetFunctionalities()
    Dim gisResource As ESRI.ArcGIS.ADF.Web.DataSources.IGISResource = gisFunctionality.Resource
    Dim supported As Boolean = gisResource.SupportsFunctionality(GetType(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality))
    
    If supported Then
        Dim queryFunctionality As ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality = CType(gisResource.CreateFunctionality (GetType(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), Nothing), ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality)
        
        Dim layerIDs As String() = Nothing
        Dim layerNames As String() = Nothing
        queryFunctionality.GetQueryableLayers(Nothing, layerIDs, layerNames)
        
        Dim adfEnvelope As ESRI.ArcGIS.ADF.Web.Geometry.Envelope = New ESRI.ArcGIS.ADF.Web.Geometry.Envelope( -120, 30, -100, 40)
        
        Dim spatialFilter As ESRI.ArcGIS.ADF.Web.SpatialFilter = New ESRI.ArcGIS.ADF.Web.SpatialFilter()
        spatialFilter.Geometry = adfEnvelope
        spatialFilter.ReturnADFGeometries = True
        spatialFilter.MaxRecords = 1000
        
        Dim index As Integer = 0
        Do While index < layerIDs.Length
            Dim queryResultsDataTable As System.Data.DataTable = queryFunctionality.Query(gisFunctionality.Name, layerIDs(index), spatialFilter)
            queryResultsDataTable.TableName = gisResource.Name &amp; "_" &amp; layerNames(index)
            queryResultsDataSet.Tables.Add(queryResultsDataTable)
            index + = 1
        Loop
    End If
Next gisFunctionality






Additional Requirements
  • The sample assumes that a MapResourceManager and Map control (named Map1) are available in the current scope and that a layer in a resource has spatial features within the geographic extent (-120, 30) to (-100, 40) in decimal degrees.