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;
Angemeldete Mitglieder können Beiträge verfassen, Updates folgen und mehr. Neu hier? Registriere ein kostenloses Konto.
Find useful guides, FAQs, and documents to help you navigate and make the most of Esri Community.