IDictionary<string, object> wirtReport = new Dictionary<string, object>();
wirtReport.Clear();
for (int i = 0; i < wirtlayerlist.Count; i++) { if (wirtlayerlist.ElementAt(i) == 18) wirtReport.Add(wirtResult[0, 0], new { Prop1 = wirtResult[0, 1], Prop2 = wirtResult[0, 2], Prop3 = wirtResult[0, 3] }); else if (wirtlayerlist.ElementAt(i) == 21) wirtReport.Add(wirtResult[1, 0], new { Prop1 = wirtResult[1, 1], Prop2 = wirtResult[1, 2], Prop3 = wirtResult[1, 3] }); else if (wirtlayerlist.ElementAt(i) == 20) wirtReport.Add(wirtResult[2, 0], new { Prop1 = wirtResult[2, 1], Prop2 = wirtResult[2, 2], Prop3 = wirtResult[2, 3] }); else if (wirtlayerlist.ElementAt(i) == 23) wirtReport.Add(wirtResult[3, 0], new { Prop1 = wirtResult[3, 1], Prop2 = wirtResult[3, 2], Prop3 = wirtResult[3, 3] }); else if (wirtlayerlist.ElementAt(i) == 16) wirtReport.Add(wirtResult[4, 0], new { Prop1 = wirtResult[4, 1], Prop2 = wirtResult[4, 2], Prop3 = wirtResult[4, 3] }); else if (wirtlayerlist.ElementAt(i) == 14) wirtReport.Add(wirtResult[5, 0], new { Prop1 = wirtResult[5, 1], Prop2 = wirtResult[5, 2], Prop3 = wirtResult[5, 3] }); } wirtReportPage.WirtReportDataGrid.ItemsSource = wirtReport; wirtReportPage.ParentLayoutRoot = InfoStackPanel; wirtReportPage.thisPass(this); wirtReportPage.Show();
public partial class MainPage : UserControl { public MainPage() { InitializeComponent(); IDictionary<string, object> y = new Dictionary<string, object>(); y.Add("URL1", new { Prop1 = "A1", Prop2 = "A2", Prop3 = "A3" }); y.Add("URL2", new { Prop1 = "B1", Prop2 = "B2", Prop3 = "B3" }); y.Add("URL3", new { Prop1 = "C1", Prop2 = "C2", Prop3 = "C3" }); this.testGrid.ItemsSource = y; } }
<sdk:DataGrid AutoGenerateColumns="False" Height="128" HorizontalAlignment="Left" Margin="18,43,0,0" Name="testGrid" VerticalAlignment="Top" Width="370"> <sdk:DataGrid.Columns> <sdk:DataGridTextColumn Header="Critical Resource" Binding="{Binding Key}" /> <sdk:DataGridTextColumn Header="Resource in Vicinity of Project Polygon" Binding="{Binding Value.Prop1}" /> <sdk:DataGridTextColumn Header="Resource within Buffer" Binding="{Binding Value.Prop2}" /> <sdk:DataGridTextColumn Header="Notes" Binding="{Binding Value.Prop3}" /> </sdk:DataGrid.Columns> </sdk:DataGrid>
Try as highlighted in red... it worked for me
<slData:DataGridTextColumn Header="Resource within Buffer"/> <slData:DataGridTextColumn Header="Notes"/>
wirtReport.Add(new KeyValuePair<string, string>(url, "RESOURCE FOUND"));
Hey Doc, Thank you for the prompt reply. I have such datagrid in the xaml: <slData:DataGrid x:Name="WirtReportDataGrid" Width="Auto" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="False" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto" Grid.Row="1" CanUserSortColumns="True"> <slData:DataGrid.Columns> <slData:DataGridTextColumn Header="Critical Resource" Binding="{Binding Key}"/> <slData:DataGridTextColumn Header="Resource in Vicinity of Project Polygon" Binding="{Binding Value}"/> </slData:DataGrid.Columns> </slData:DataGrid> 'Critical Resource' refers to the layer's name, like wetland, river. 'Resource in Vicinity of Project Polygon' refers to 'found' or 'not found'. I wrote below in cs file and it doesn't return any results in the datagrid. private void WirtQueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; string url =""; if (wirtMapLayer.Count != 0) url = wirtMapLayer.Peek(); if (featureSet == null || featureSet.Features.Count < 1) { wirtReport.Add(new KeyValuePair<string, string>(url, "NO RESOURCE FOUND")); } else if (featureSet != null && featureSet.Features.Count > 0) { wirtReport.Add(new KeyValuePair<string, string>(url, "FOUND")); } wirtReportPage.WirtReportDataGrid.ItemsSource = wirtReport; } So If I use your method, do I need to also set any binding on the columns in xaml?
<slData:DataGrid x:Name="WirtReportDataGrid" Width="Auto" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="False" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto" Grid.Row="1" CanUserSortColumns="True"> <slData:DataGrid.Columns> <slData:DataGridTextColumn Header="Critical Resource" Binding="{Binding Key}"/> <slData:DataGridTextColumn Header="Resource in Vicinity of Project Polygon" Binding="{Binding Value}"/> </slData:DataGrid.Columns> </slData:DataGrid>
private void WirtQueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; string url =""; if (wirtMapLayer.Count != 0) url = wirtMapLayer.Peek(); if (featureSet == null || featureSet.Features.Count < 1) { wirtReport.Add(new KeyValuePair<string, string>(url, "NO RESOURCE FOUND")); } else if (featureSet != null && featureSet.Features.Count > 0) { wirtReport.Add(new KeyValuePair<string, string>(url, "FOUND")); } wirtReportPage.WirtReportDataGrid.ItemsSource = wirtReport; }
Hey Doc, Thank you for the prompt reply. I have such datagrid in the xaml: <slData:DataGrid x:Name="WirtReportDataGrid" Width="Auto" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="False" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto" Grid.Row="1" CanUserSortColumns="True"> <slData:DataGrid.Columns> <slData:DataGridTextColumn Header="Critical Resource"/> <slData:DataGridTextColumn Header="Resource in Vicinity of Project Polygon"/> </slData:DataGrid.Columns> </slData:DataGrid> 'Critical Resource' refers to the layer's name, like wetland, river. 'Resource in Vicinity of Project Polygon' refers to 'found' or 'not found'. I wrote below in cs file and it doesn't return any results in the datagrid. private void WirtQueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args) { FeatureSet featureSet = args.FeatureSet; string url =""; if (wirtMapLayer.Count != 0) url = wirtMapLayer.Peek(); if (featureSet == null || featureSet.Features.Count < 1) { wirtReport.Add(new KeyValuePair<string, string>(url, "NO RESOURCE FOUND")); } else if (featureSet != null && featureSet.Features.Count > 0) { wirtReport.Add(new KeyValuePair<string, string>(url, "FOUND")); } wirtReportPage.WirtReportDataGrid.ItemsSource = wirtReport; } So If I use your method, do I need to also set any binding on the columns in xaml?
<slData:DataGrid x:Name="WirtReportDataGrid" Width="Auto" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White" IsReadOnly="False" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Auto" Grid.Row="1" CanUserSortColumns="True"> <slData:DataGrid.Columns> <slData:DataGridTextColumn Header="Critical Resource"/> <slData:DataGridTextColumn Header="Resource in Vicinity of Project Polygon"/> </slData:DataGrid.Columns> </slData:DataGrid>
Hi everyone,In my application, spatial query task will perform on multiple layers (for example 6 layers) in one map service. So I want to define a 2D string array with row representing layer name and column representing hit result. If the first query task performed on layer1 returns a no_null result and the second query task performed on layer2 returns null result, the first row in this 2D array would be like this: Wetland Resource found.River Resource not found.Then I want to use a datagrid to display the results. So can I bind this 2D array to the datagrid? Thank you:)
IDictionary<string, string> y = new Dictionary<string, string>(); y.Add(new KeyValuePair<string, string>("Wetland", "Resource found.")); y.Add(new KeyValuePair<string, string>("River", "Resource not found.")); this.testGrid.ItemsSource = y;
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.