Here is how I modified the Selection Sample from the Silverlight samples web site:XAML code:You can see the commented section which is being replace with the column definitions in the code behind in the next code block. If I remove the comment tags and comment out the code behind to define the columns, everything works. But of course, I want to be able to do this in code behind.
<slData:DataGrid x:Name="QueryDetailsDataGrid" Grid.Row="1"
Width="Auto" Height="120"
AutoGenerateColumns="False" HeadersVisibility="Column" Background="White"
IsReadOnly="True" HorizontalScrollBarVisibility="Hidden"
RowStyle="{StaticResource MyCustomRow}" CanUserSortColumns="True"
SelectionChanged="QueryDetailsDataGrid_SelectionChanged"
LoadingRow="QueryDetailsDataGrid_LoadingRow">
<!--<slData:DataGrid.Columns>
<slData:DataGridTextColumn CanUserSort="True" SortMemberPath="NAME" Binding="{Binding Attributes[NAME]}" Header="Abrev."/>
<slData:DataGridTextColumn CanUserSort="True" SortMemberPath="MIN_NAME_E" Binding="{Binding Attributes[MIN_NAME_E]}" Header="Province Name"/>
<slData:DataGridTextColumn CanUserSort="True" SortMemberPath="MIN_STATUS" Binding="{Binding Attributes[MIN_STATUS]}" Header="Status"/>
</slData:DataGrid.Columns>-->
</slData:DataGrid>
Code behind:
// Setup depending on selected layer
switch (tbxLayerSelected.Text.ToString())
{
case "Provinces":
// Provinces is the 4th layer, index 3
queryTaskService = serverURL + "BaseMap/MapServer/3";
fieldsList = new string[] { "NAME", "MIN_NAME_E", "MIN_STATUS" };
QueryDetailsDataGrid.Columns.Clear();
DataGridTextColumn dgc = new DataGridTextColumn();
dgc.CanUserSort = true;
dgc.SortMemberPath = "NAME";
dgc.Binding = new System.Windows.Data.Binding("Attribute[NAME]");
dgc.Header = "Abrev.";
QueryDetailsDataGrid.Columns.Add(dgc);
dgc = new DataGridTextColumn();
dgc.CanUserSort = true;
dgc.SortMemberPath = "MIN_NAME_E";
dgc.Binding = new System.Windows.Data.Binding("Attribute[MIN_NAME_E]");
dgc.Header = "Province Name";
QueryDetailsDataGrid.Columns.Add(dgc);
dgc = new DataGridTextColumn();
dgc.CanUserSort = true;
dgc.SortMemberPath = "MIN_STATUS";
dgc.Binding = new System.Windows.Data.Binding("Attribute[MIN_STATUS]");
dgc.Header = "Status";
QueryDetailsDataGrid.Columns.Add(dgc);
break;
default:
break;
}
//QueryTask queryTask = new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/" +
// "Demographics/ESRI_Census_USA/MapServer/5");
QueryTask queryTask = new QueryTask(queryTaskService);
queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
queryTask.Failed += QueryTask_Failed;
// Bind data grid to query results
Binding resultFeaturesBinding = new Binding("LastResult.Features");
resultFeaturesBinding.Source = queryTask;
QueryDetailsDataGrid.SetBinding(DataGrid.ItemsSourceProperty, resultFeaturesBinding);
Query query = new ESRI.ArcGIS.Client.Tasks.Query();
// Specify fields to return from query
//query.OutFields.AddRange(new string[] { "STATE_NAME", "SUB_REGION", "STATE_FIPS", "STATE_ABBR", "POP2000", "POP2007" });
query.OutFields.AddRange(fieldsList);
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(msgNoFeatures);
return;
}
GraphicsLayer graphicsLayer = Map.Layers["MySelectionGraphicsLayer"] as GraphicsLayer;
if (featureSet != null && featureSet.Features.Count > 0)
{
QueryDetailsDataGrid.ItemsSource = args.FeatureSet.Features;
foreach (Graphic feature in featureSet.Features)
{
feature.Symbol = LayoutRoot.Resources["ResultsFillSymbol"] as FillSymbol;
graphicsLayer.Graphics.Insert(0, feature);
}
ResultsDisplay.Visibility = Visibility.Visible;
}
MyDrawSurface.IsEnabled = false;
}