Select to view content in your preferred language

Help in filter Where: FindParameters Class & LayerDefinitions

2278
2
10-05-2010 01:25 PM
YgorThomaz
Emerging Contributor
Hello guys,

I am creating a FindTask and must use the class and property FindParameters LayerDefinitions (get; set;): IEnumerable <LayerDefinition>. Can anyone send an example of "Where (filter)" using LayerDefinitions?

Part of code bellow :

        private void ExecuteButton_Click(object sender, RoutedEventArgs e)
        {
            GraphicsLayer graphicsLayer = Mapa.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            FindTask findTask = new FindTask("http://192.168.5.../MapServer");

            ....

            findParameters.LayerDefinitions = ???;

            findParameters.SearchText = FindText.Text;
            findTask.ExecuteAsync(findParameters);
        }

Thank´s!
0 Kudos
2 Replies
YgorThomaz
Emerging Contributor
Hello,

I worked in my code last night. But, i have a new problem, please take a look in my code:

        private void ExecuteButton_Click(object sender, RoutedEventArgs e)
        {
            GraphicsLayer graphicsLayer = Mapa.Layers["MyGraphicsLayer"] as GraphicsLayer;
            graphicsLayer.ClearGraphics();

            FindTask findTask = new FindTask("http://192.168.5.104/ArcGIS/rest/services/MDSalvador_Pesquisas/MapServer");
            findTask.Failed += FindTask_Failed;

            FindParameters findParameters = new FindParameters();
            // Layer ids to search
            findParameters.LayerIds.AddRange(new int[] { 1, 2 });
            // Fields in layers to search
            findParameters.SearchFields.AddRange(new string[] { "TOPONIM", "NM_BAIRROS" });

            string termoProcuradoSemAcentos = RemoveAcentos.removeAcentos(FindText.Text);

            ObservableCollection<LayerDefinition> layerDefs = new ObservableCollection<LayerDefinition>();

            layerDefs.Add(new LayerDefinition()
            {
                LayerID = 1,
                Definition = "UPPER(TOPONIM_CI) like UPPER('%" + termoProcuradoSemAcentos + "%')"
            });
            layerDefs.Add(new LayerDefinition()
            {
                LayerID = 2,
                Definition = "UPPER(NM_BAIRROS_CI) like UPPER('%" + termoProcuradoSemAcentos + "%')"
            });

            findParameters.LayerDefinitions = layerDefs;

            // Bind data grid to find results.  Bind to the LastResult property which returns a list
            // of FindResult instances.  When LastResult is updated, the ItemsSource property on the 
            // will update.  
            Binding resultFeaturesBinding = new Binding("LastResult");
            resultFeaturesBinding.Source = findTask;
            FindDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding);


            //findParameters.SearchText = FindText.Text;

            findTask.ExecuteAsync(findParameters);

        }


My problem is that the property "findParameters.SearchText = FindText.Text;" it's necessary. However, my conditions in "findParameters.LayerDefinitions = layerDefs;" are not considered.
0 Kudos
JenniferNery
Esri Regular Contributor
You can try the following code. I tweaked just the highlighted code from this SDK sample: http://resources.arcgis.com/en/help/silverlight-api/samples/start.htm#Find

   FindTask findTask = new FindTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Specialty/ESRI_StatesCitiesRivers_USA/MapServer");  
   findTask.ExecuteCompleted += (a, b) =>
    {
     Dispatcher.BeginInvoke((Action)delegate
     {
      MessageBox.Show(string.Format("Result.Count: {0}", b.FindResults.Count));
     });

    };
   FindParameters findParameters = new FindParameters();
   findParameters.LayerIds.AddRange(new int[] { 0, 1, 2 });
   findParameters.SearchFields.AddRange(new string[] { "CITY_NAME", "NAME", "SYSTEM", "STATE_ABBR", "STATE_NAME" });   
   findParameters.LayerDefinitions = new LayerDefinition[] 
   {
    new LayerDefinition() { LayerID = 0, Definition = "STATE='California" },
    new LayerDefinition() { LayerID = 2, Definition = "STATE='California" } 
   };
   findParameters.SpatialReference =new SpatialReference(4326);
   findParameters.SearchText = "River";
   findTask.ExecuteAsync(findParameters);
0 Kudos