Solved! Go to Solution.
<esri:FeatureDataGrid Grid.Row="2" x:Name="MyDataGrid" AutoGeneratingColumn="MyDataGrid_AutoGeneratingColumn" Map="{Binding ElementName=MyMap}" GraphicsLayer="{Binding ElementName=MyMap, Path=Layers.[California]}" />
private void MyDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { switch (e.PropertyName) { case "OBJECTID": case "AREA": e.Column.Visibility = Visibility.Collapsed; break; } }
foreach (var f in args.FeatureSet.Features) { var g = new Graphic() { Geometry = Geometry.Clone(f.Geometry) }; foreach (var a in f.Attributes) if(a.Key != "FieldToExclude") g.Attributes[a.Key] = a.Value; l.Graphics.Add(g); }
If you are using GraphicsLayer, FeatureDataGrid.Columns will be generated based on GraphicsLayer.Graphics.Attributes. If you want Query results to exclude some fields, then don't add them to your GraphicsLayer.Graphics.Attributes.
Something like this:foreach (var f in args.FeatureSet.Features) { var g = new Graphic() { Geometry = Geometry.Clone(f.Geometry) }; foreach (var a in f.Attributes) if(a.Key != "FieldToExclude") g.Attributes[a.Key] = a.Value; l.Graphics.Add(g); }
foreach (var f in args.FeatureSet.Features) { var g = new Graphic() { Geometry = Geometry.Clone(f.Geometry) }; foreach (var a in f.Attributes) if(a.Key != "FieldToExclude") g.Attributes[a.Key] = a.Value; l.Graphics.Add(g); }
To answer your question, since FDG.Columns is dependent on GraphicsLayer.Graphics.Attributes, you should not add all fields returned by query to your graphic.Attributes. There could be more fields you can exclude here.
Alternatively, simply use query.OutFields to show only fields you want returned in the FDG.
foreach (var f in args.FeatureSet.Features) { var g = new Graphic() { Geometry = Geometry.Clone(f.Geometry) }; foreach (var a in f.Attributes) if(a.Key != "FieldToExclude") g.Attributes[a.Key] = a.Value; l.Graphics.Add(g); }
<esri:FeatureDataGrid Grid.Row="2" x:Name="MyDataGrid" AutoGeneratingColumn="MyDataGrid_AutoGeneratingColumn" Map="{Binding ElementName=MyMap}" GraphicsLayer="{Binding ElementName=MyMap, Path=Layers.[California]}" />
private void MyDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { switch (e.PropertyName) { case "OBJECTID": case "AREA": e.Column.Visibility = Visibility.Collapsed; break; } }
<esri:FeatureDataGrid Grid.Row="2" x:Name="MyDataGrid" AutoGeneratingColumn="MyDataGrid_AutoGeneratingColumn" Map="{Binding ElementName=MyMap}" GraphicsLayer="{Binding ElementName=MyMap, Path=Layers.[California]}" />private void MyDataGrid_AutoGeneratingColumn(object sender, DataGridAutoGeneratingColumnEventArgs e) { switch (e.PropertyName) { case "OBJECTID": case "AREA": e.Column.Visibility = Visibility.Collapsed; break; } }
Just wire up the AutoGeneratingColumn event and when each column gets created check the e.PropertyName for the attribute name you don't want then hide the column.