use FeatureLayer to assign to FeatureDataGrid.GraphicsLayer property if you want to preserve field information, instead of performing a QueryTask and then putting results to a GraphicsLayer. You can still perform queries using FeatureLayer by updating Where clause.
<esri:FeatureLayer ID="MAINPOINTS" DisableClientCaching="True" AutoSave="False" Url="http://myserver/ArcGIS/rest/services/gdb/FeatureServer/0" OutFields="*" Mode="OnDemand">
<Grid> <Grid.RowDefinitions> <RowDefinition Height="15" /> <RowDefinition Height="*" /> </Grid.RowDefinitions> <TextBlock x:Name="DataDisplayTitle" Text="Search Results" FontSize="9" Grid.Row="0" FontWeight="Bold" FontFamily="Arial" Foreground="#FFFFFFFF" /> <esriWidgets:FeatureDataGrid Grid.Row="1" x:Name="QueryDetailsDataGrid" Height="170" Map="{Binding ElementName=Map}" GraphicsLayer="{Binding Layers[MySelectionGraphicsLayer], ElementName=Map}" Style="{StaticResource FeatureDataGridStyle1}" /> </Grid>
string baseUrl = "http://myserver/ArcGIS/rest/services/gdb/MapServer"; for (int i = 0; i <= 1; i++) { FeatureLayer featureLayer = new FeatureLayer() { Url = string.Format("{0}/{1}", baseUrl, i) }; featureLayer.Initialize(); layers.Add(featureLayer); } //layers.RemoveAt(1); Layers.ItemsSource = layers; Layers.SelectedIndex = 0;
#region Spatial Query private void esriTools_ToolbarItemClicked(object sender, ESRI.ArcGIS.Client.Toolkit.SelectedToolbarItemArgs e) { switch (e.Index) { case 0: // Point MyDrawSurface.DrawMode = DrawMode.Point; break; case 1: // Polyline MyDrawSurface.DrawMode = DrawMode.Polyline; break; case 2: // Polygon MyDrawSurface.DrawMode = DrawMode.Polygon; break; case 3: // Rectangle MyDrawSurface.DrawMode = DrawMode.Rectangle; break; default: // Clear MyDrawSurface.DrawMode = DrawMode.None; GraphicsLayer selectionGraphicslayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryDetailsDataGrid.ItemsSource = null; ResultsDisplay.IsExpanded = false; break; } MyDrawSurface.IsEnabled = (MyDrawSurface.DrawMode != DrawMode.None); StatusTextBlock.Text = e.Item.Text; } private void MyDrawSurface_DrawComplete(object sender, ESRI.ArcGIS.Client.DrawEventArgs args) { GraphicsLayer selectionGraphicslayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; selectionGraphicslayer.ClearGraphics(); QueryTask queryTask = new QueryTask((Layers.SelectedItem as FeatureLayer).Url); queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted; queryTask.Failed += QueryTask_Failed; Query query = new ESRI.ArcGIS.Client.Tasks.Query(); query.OutFields.Add("*"); query.Geometry = args.Geometry; // Return geometry with result features query.ReturnGeometry = true; queryTask.ExecuteAsync(query); } private void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; if (featureSet == null || featureSet.Features.Count < 1) { MessageBox.Show("No features retured from query"); return; } GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer; if (featureSet != null && featureSet.Features.Count > 0) // ResultsDisplay.Visibility = Visibility.Visible; { foreach (Graphic feature in featureSet.Features) { switch (featureSet.GeometryType.ToString()) { case "Polygon": feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol; break; case "Polyline": feature.Symbol = LayoutRoot.Resources["CustomGrowLineSymbol"] as LineSymbol; break; case "Point": feature.Symbol = LayoutRoot.Resources["ResultsMarkerSymbol"] as SimpleMarkerSymbol; break; } graphicsLayer.Graphics.Insert(0, feature); } ResultsDisplay.IsExpanded = true; } MyDrawSurface.IsEnabled = false; } private void QueryTask_Failed(object sender, TaskFailedEventArgs args) { MessageBox.Show("Query failed: " + args.Error); } #endregion
Aangemelde leden kunnen berichten plaatsen, updates volgen en meer. Nieuw hier? Registreer een gratis account.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.