private void Execute_ParcelSearch_Click(object sender, RoutedEventArgs e) { GraphicsLayer ParcelSearch_GraphicsLayer = MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer; ParcelSearch_GraphicsLayer.ClearGraphics(); ParcelSearch_TaskResultsDataGrid.ItemsSource = null; ParcelSearch_TaskResultsPanel.Visibility = Visibility.Collapsed; if (ParcelSearch_tabControl != null) { TabControl tb = ParcelSearch_tabControl as TabControl; if (tb.SelectedIndex > -1) { ParcelSearch_tab = (tb.SelectedItem as TabItem).Name; } if (ParcelSearch_tab == "ParcelSearch_tabAPN" && (txtAPN.Text.Length < 4 || txtStNumber.Text == null)) { MessageBox.Show("You must enter atleast 4 numbers"); } else { QueryTask ParcelSearch = new QueryTask("http://{SERVER}/ArcGIS/rest/services/GISPRD_Main/MapServer/79"); ParcelSearch.ExecuteCompleted += ParcelSearch_ExecuteCompleted; ParcelSearch.Failed += ParcelSearch_Failed; Query query = new Query(); query.ReturnGeometry = true; query.OutSpatialReference = MyMap.SpatialReference; query.OutFields.Add("*"); if (ParcelSearch_tab == "ParcelSearch_tabAPN") { query.Where = "APN LIKE '" + txtAPN.Text + "%'"; } else if (ParcelSearch_tab == "ParcelSearch_tabAddr") { query.Where = "STNUMBER LIKE '" + txtStNumber.Text + "%' AND STNAME LIKE '" + txtStName.Text + "%' AND STSUFFIX LIKE '" + txtStSuffix.Text + "%'"; } ParcelSearch.ExecuteAsync(query); //ParcelSearch_TaskResultsPanel.Visibility = Visibility.Visible; } } else { MessageBox.Show("You must specify an APN, Address, or Owner to search for"); } } private void ParcelSearch2(object sender, RoutedEventArgs e) { GraphicsLayer ParcelSearch_GraphicsLayer = MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer; if (ParcelSearch_tabControl != null) { TabControl tb = ParcelSearch_tabControl as TabControl; if (tb.SelectedIndex > -1) { ParcelSearch_tab = (tb.SelectedItem as TabItem).Name; } if (ParcelSearch_tab == "ParcelSearch_tabAPN" && (txtAPN.Text.Length < 4 || txtStNumber.Text == null)) { MessageBox.Show("You must enter atleast 4 numbers"); } else { QueryTask ParcelSearch2 = new QueryTask("http://{SERVER}/ArcGIS/rest/services/GISPRD_Main/MapServer/80"); ParcelSearch2.ExecuteCompleted += ParcelSearch2_ExecuteCompleted; ParcelSearch2.Failed += ParcelSearch2_Failed; Query query = new Query(); query.ReturnGeometry = true; query.OutSpatialReference = MyMap.SpatialReference; query.OutFields.Add("*"); if (ParcelSearch_tab == "ParcelSearch_tabAPN") { query.Where = "APN LIKE '" + txtAPN.Text + "%'"; } else if (ParcelSearch_tab == "ParcelSearch_tabAddr") { query.Where = "STNUMBER LIKE '" + txtStNumber.Text + "%' AND STNAME LIKE '" + txtStName.Text + "%' AND STSUFFIX LIKE '" + txtStSuffix.Text + "%'"; } ParcelSearch2.ExecuteAsync(query); //ParcelSearch_TaskResultsPanel.Visibility = Visibility.Visible; } } else { MessageBox.Show("You must specify an APN, Address, or Owner to search for"); } } private void ParcelSearch_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { GraphicsLayer ParcelSearch_GraphicsLayer = MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer; ParcelSearch_GraphicsLayer.ClearGraphics(); FeatureSet featureSet = args.FeatureSet; if (featureSet.Features.Count > 0) { ParcelSearch_TaskResultsDataGrid.ItemsSource = featureSet.Features; foreach (Graphic resultFeature in featureSet.Features) { resultFeature.Symbol = DefaultFillSymbol; ParcelSearch_GraphicsLayer.Graphics.Add(resultFeature); } } else { //MessageBox.Show("No features found"); } ParcelSearch2(sender, null); } private void ParcelSearch2_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { GraphicsLayer ParcelSearch_GraphicsLayer = MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer; FeatureSet featureSet = args.FeatureSet; if (featureSet.Features.Count > 0) { ParcelSearch_TaskResultsDataGrid.ItemsSource = featureSet.Features; // Add results to map foreach (Graphic resultFeature in featureSet.Features) { resultFeature.Symbol = DefaultFillSymbol; ParcelSearch_GraphicsLayer.Graphics.Add(resultFeature); } } else { //MessageBox.Show("No features found"); } ZoomToGraphicsLayer(MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer); ParcelSearch_TaskResultsPanel.Visibility = Visibility.Visible; } private void ParcelSearch_TaskResultsDataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) { // Highlight the graphic feature associated with the selected rows DataGrid dataGrid = sender as DataGrid; int selectedIndex = dataGrid.SelectedIndex; if (selectedIndex > -1) { GraphicsLayer ParcelSearch_GraphicsLayer = MyMap.Layers["ParcelSearch_GraphicsLayer"] as GraphicsLayer; ParcelSearch_GraphicsLayer.ClearGraphics(); foreach (Graphic resultFeature in ParcelSearch_TaskResultsDataGrid.SelectedItems) { resultFeature.Symbol = DefaultFillSymbol; ParcelSearch_GraphicsLayer.Graphics.Add(resultFeature); } } }
Did anyone get this working....I'm trying to do the similar.
What I mean to say is that you sure can make multiple queries but keep in mind that you cannot make multiple asynchronous calls sequentially, you need to wait for one to complete before you can call another.In other words, this would fail: identifyTask.ExecuteAsync(identifyParams1); identifyTask.ExecuteAsync(identifyParams2);So for example you have a list of url's to query on, you need to keep track on what has been queried and what has not been queried yet. After the QueryTask ExecultCompleted fires, that is the only time you can call another query.
identifyTask.ExecuteAsync(identifyParams1); identifyTask.ExecuteAsync(identifyParams2);
private void SpatialQuery(object sender, RoutedEventArgs e) { for (int j = 0; j < 2; j++) { spatialQ(j); } } private void spatialQ(int k) { switch (k) { case 0: QueryTask queryTask = new QueryTask((layers.ElementAt(0) as FeatureLayer).Url); queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; MessageBox.Show("k="+ k); queryTask.Failed += QueryTask_Failed; Query query = new ESRI.ArcGIS.Client.Tasks.Query(); query.OutFields.AddRange(new string[] { "TRS" }); ESRI.ArcGIS.Client.Geometry.Polygon queryGeometry = new ESRI.ArcGIS.Client.Geometry.Polygon(); queryGeometry.Rings.Add(pPointCollection); query.Geometry = queryGeometry; query.ReturnGeometry = true; queryTask.ExecuteAsync(query); break; case 1: QueryTask queryTask1 = new QueryTask((layers.ElementAt(1) as FeatureLayer).Url); queryTask1.ExecuteCompleted += QueryTask_ExecuteCompleted1; MessageBox.Show("k="+ k); queryTask1.Failed += QueryTask_Failed; Query query1 = new ESRI.ArcGIS.Client.Tasks.Query(); QueryDetailsDataGrid.DataContext = "null"; //query1.OutFields.AddRange(new string[] { "NAME_CNTY" }); ESRI.ArcGIS.Client.Geometry.Polygon queryGeometry1 = new ESRI.ArcGIS.Client.Geometry.Polygon(); queryGeometry1.Rings.Add(pPointCollection); query1.Geometry = queryGeometry1; query1.ReturnGeometry = true; queryTask1.ExecuteAsync(query1); break; } }
Yes, that is correct.
You cannot do Async calls in one iteration. You need to make one Async call at a time, after the previous Async call has returned.
In this example: http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#IdentifyQuery is performed on the map service itself, which can contain several sub layers. Is this what you need?
Signed in members can post, follow updates, and more. New here? Register a free account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.