Проблема при выборке через IQueryFunctionality

0 голосов
спросил 11 Март, 08 от filippov70 (5,320 баллов) в категории Программные продукты Esri
Доброго дня всем.

Использую следующий код для поиска объекта по значению поля:
    private void addToResult(string value ,string field)
    {
        try
        {
                IGISResource resource;
                IQueryFunctionality query;

                List<DataSet> gdsList = new List<DataSet>();

                TaskResults1.Nodes.Clear();
           

                foreach (IMapFunctionality mapFunc in Map1.GetFunctionalities())
                {
                    if (mapFunc is ESRI.ArcGIS.ADF.Web.DataSources.Graphics.MapFunctionality)
                    {

                        continue;
                    }

                    resource = mapFunc.Resource;
                   
                    query = resource.CreateFunctionality(typeof(ESRI.ArcGIS.ADF.Web.DataSources.IQueryFunctionality), "qry_") as IQueryFunctionality;

                    string[] layerIds;
                    string[] layerNames;
                    query.GetQueryableLayers(null, out layerIds, out layerNames);
                    //string resourceType = resource.DataSource.GetType().ToString();
                    QueryFilter QF = new QueryFilter();
                    QF.ReturnADFGeometries = true;
                    QF.SubFields.Add("DB_ID");
                    QF.SubFields.Add("OBJECTID");
                    QF.WhereClause = field + "=" + value;

                                      
                    DataTable[] ds = new DataTable[layerIds.Length];
                    int i = 0;
                    try
                    {
                        foreach(string layerId in layerIds)
                        {
                            DataTable QyDT = query.Query(mapFunc.Name, layerId, QF);
                           
                            if (QyDT != null)
                            {
                                ds = QyDT;
                                i++;
                            }
                        }
                       
                      
                    }
                    catch (Exception e)
                    {
                        DataTable table = new DataTable();
                        table.TableName = "Identify Error: " + e.Message;
                        ds = new DataTable[] { table };
                    }
..............
так вот, при первом запросе он все находит и добавляет запись в дерево TaskResults'а
потом я возвращаюсь на станицу запроса, меняю искомое значение и при повторном поиске(и все последующих) ничего не добавляется TaskResults конторл, так как QyDT не содержат ни одной записи по всем слоям
кто нибудь может пролить свет на эту пр

4 Ответы

0 голосов
ответил 12 Март, 08 от Alexander1 (32,520 баллов)
Для начала я бы на всякий случай вставил:

...............
resource = mapFunc.Resource;

            if (!resource .Initialized)
             {
               resource .Initialize();
             }
...............
0 голосов
ответил 13 Март, 08 от filippov70 (5,320 баллов)
Спасибо Alexander, но это не помогает.
resource .Initialized постоянно true
есть еще предложения?

кстати, query.GetQueryableLayers(null, out layerIds, out layerNames);
каждый раз возвращает нужные массивы с идами и именами слоев
но, вот query.Query(.... никак работать не хочет
0 голосов
ответил 13 Март, 08 от filippov70 (5,320 баллов)
единственное, на мой взгляд, отличие - появление при всех последующих загрузках графического слоя, который добавляется далее по коду

if (ds != null && ds.Length > 0)
                    {
                        DataSet gds = new DataSet();
                        DataTable table;
                        for (int j = 0; j < ds.Length; j++)
                        {
                            if (ds[j] != null)
                            {
                                table = ds[j];
                                // Remove empty tables.
                                //System.Diagnostics.Debug.Print("table.Rows.Count = " + table.Rows.Count.ToString() + "--" + table.TableName);
                                if (table.Rows.Count == 0 && table.TableName.IndexOf("Error") < 0)
                                    continue;
                                GraphicsLayer layer = ESRI.ArcGIS.ADF.Web.Converter.ToGraphicsLayer(table, System.Drawing.Color.Crimson, System.Drawing.Color.Green);


0 голосов
ответил 05 Март, 09 от kitiara (220 баллов)
и каким образом все решилось, если не секрет?
Добро пожаловать на сайт Вопросов и Ответов, где вы можете задавать вопросы по GIS тематике и получать ответы от других членов сообщества.
...