Solved! Go to Solution.
var fieldsToDisplay = new List<string>() {"fieldName1", fieldName2"};
var attributesToDisplay = new Dictionary<string, object>();
foreach(var item in selectedFeature.Attributes)
if(fieldsToDisplay.Contains(item.Key))
attributesToDisplay[item.Key]= item.Value;
IdentifyDetailsDataGrid.ItemsSource = attributesToDisplay;
Data = feature.Attributes
var temp = new Dictionary<string, object>();
var fields = new List<string>() {"field1", "field2"}; //fields to display
foreach(var item in feature.Attributes)
{
if(fields.Contains(item.Key))
temp[item.Key] = item.Value;
}
//more code goes here
Data = temp
var fieldsToDisplay = new List<string>() {"fieldName1", fieldName2"};
var attributesToDisplay = new Dictionary<string, object>();
foreach(var item in selectedFeature.Attributes)
if(fieldsToDisplay.Contains(item.Key))
attributesToDisplay[item.Key]= item.Value;
IdentifyDetailsDataGrid.ItemsSource = attributesToDisplay;
This is a question for REST API. I believe this is new to 10.1, in "dynamicLayers", you can specify "fields". In pre-10, you will get all fields but your Silverlight application can only show a subset of them. You can modify the following SDK sample: http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#Identify
Instead of this line:Data = feature.Attributes
You can create temporary variable that will hold attributesvar temp = new Dictionary<string, object>(); var fields = new List<string>() {"field1", "field2"}; //fields to display foreach(var item in feature.Attributes) { if(fields.Contains(item.Key)) temp[item.Key] = item.Value; } //more code goes here Data = temp
public void ShowFeatures(List<IdentifyResult> results)
{
_dataItems = new List<DataItem>();
if (results != null && results.Count > 0)
{
//IdentifyComboBox.Items.Clear();
foreach (IdentifyResult result in results)
{
var temp = new Dictionary<string, object>();
var fields = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" }; //fields to display
foreach (var item in feature.Attributes)
{
if (fields.Contains(item.Key))
temp[item.Key] = item.Value;
}
Graphic feature = result.Feature;
string title = result.Value.ToString() + " (" + result.LayerName + ")";
_dataItems.Add(new DataItem()
{
Title = title,
Data = temp
});
//IdentifyComboBox.Items.Add(title);
if (result.LayerId == 4)
IdentifyDetailsDataGrid.ItemsSource = feature.Attributes;
if (result.LayerId == 9)
IdentifyDetailsDataGrid2.ItemsSource = feature.Attributes;
if (result.LayerId == 14)
IdentifyDetailsDataGrid3.ItemsSource = feature.Attributes;
} public void ShowFeatures(List<IdentifyResult> results)
{
_dataItems = new List<DataItem>();
if (results != null && results.Count > 0)
{
//IdentifyComboBox.Items.Clear();
foreach (IdentifyResult result in results)
{
Graphic feature = result.Feature;
var temp = new Dictionary<string, object>();
var fields = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" }; //fields to display
foreach (var item in feature.Attributes)
{
if (fields.Contains(item.Key))
temp[item.Key] = item.Value;
}
string title = result.Value.ToString() + " (" + result.LayerName + ")";
_dataItems.Add(new DataItem()
{
Title = title,
Data = temp
});
//IdentifyComboBox.Items.Add(title);
if (result.LayerId == 4)
IdentifyDetailsDataGrid.ItemsSource = feature.Attributes;
if (result.LayerId == 9)
IdentifyDetailsDataGrid2.ItemsSource = feature.Attributes;
if (result.LayerId == 14)
IdentifyDetailsDataGrid3.ItemsSource = feature.Attributes;
} public void ShowFeatures(List<IdentifyResult> results)
{
_dataItems = new List<DataItem>();
if (results != null && results.Count > 0)
{
//IdentifyComboBox.Items.Clear();
foreach (IdentifyResult result in results)
{
Graphic feature = result.Feature;
string title = result.Value.ToString() + " (" + result.LayerName + ")";
_dataItems.Add(new DataItem()
{
var temp = new Dictionary<string, object>();
var fields = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" }; //fields to display
foreach (var item in feature.Attributes)
{
if (fields.Contains(item.Key))
temp[item.Key] = item.Value;
}
Title = title,
Data = temp
});
//IdentifyComboBox.Items.Add(title);
if (result.LayerId == 4)
IdentifyDetailsDataGrid.ItemsSource = feature.Attributes;
if (result.LayerId == 9)
IdentifyDetailsDataGrid2.ItemsSource = feature.Attributes;
if (result.LayerId == 14)
IdentifyDetailsDataGrid3.ItemsSource = feature.Attributes;
}
//IdentifyComboBox.SelectedIndex = 0;
}
}
public void ShowFeatures(List<IdentifyResult> results)
{
_dataItems = new List<DataItem>();
if (results != null && results.Count > 0)
{
foreach (IdentifyResult result in results)
{
Graphic feature = result.Feature;
string title = result.Value.ToString() + " (" + result.LayerName + ")";
_dataItems.Add(new DataItem()
{
Title = title,
Data = feature.Attributes
});
var fieldsToDisplay = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" };
var attributesToDisplay = new Dictionary<string, object>();
foreach (var item in feature.Attributes)
if (fieldsToDisplay.Contains(item.Key))
attributesToDisplay[item.Key] = item.Value;
if (result.LayerId == 4)
IdentifyDetailsDataGrid.ItemsSource = feature.Attributes;
IdentifyDetailsDataGrid.ItemsSource = attributesToDisplay;
if (result.LayerId == 9)
IdentifyDetailsDataGrid2.ItemsSource = feature.Attributes;
IdentifyDetailsDataGrid2.ItemsSource = attributesToDisplay;
if (result.LayerId == 14)
IdentifyDetailsDataGrid3.ItemsSource = feature.Attributes;
IdentifyDetailsDataGrid3.ItemsSource = attributesToDisplay;
}Never mind, I got it with the following code:public void ShowFeatures(List<IdentifyResult> results) { _dataItems = new List<DataItem>(); if (results != null && results.Count > 0) { foreach (IdentifyResult result in results) { Graphic feature = result.Feature; string title = result.Value.ToString() + " (" + result.LayerName + ")"; _dataItems.Add(new DataItem() { Title = title, Data = feature.Attributes }); var fieldsToDisplay = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" }; var attributesToDisplay = new Dictionary<string, object>(); foreach (var item in feature.Attributes) if (fieldsToDisplay.Contains(item.Key)) attributesToDisplay[item.Key] = item.Value; if (result.LayerId == 4) IdentifyDetailsDataGrid.ItemsSource = feature.Attributes; IdentifyDetailsDataGrid.ItemsSource = attributesToDisplay; if (result.LayerId == 9) IdentifyDetailsDataGrid2.ItemsSource = feature.Attributes; IdentifyDetailsDataGrid2.ItemsSource = attributesToDisplay; if (result.LayerId == 14) IdentifyDetailsDataGrid3.ItemsSource = feature.Attributes; IdentifyDetailsDataGrid3.ItemsSource = attributesToDisplay; }
Now all I need it to set the field attribute of "Website" to be a hyperlink in all three data grids.
public void ShowFeatures(List<IdentifyResult> results)
{
_dataItems = new List<DataItem>();
if (results != null && results.Count > 0)
{
foreach (IdentifyResult result in results)
{
Graphic feature = result.Feature;
string title = result.Value.ToString() + " (" + result.LayerName + ")";
_dataItems.Add(new DataItem()
{
Title = title,
Data = feature.Attributes
});
var fieldsToDisplay = new List<string>() { "School Name", "Address", "Zip", "Phone", "Website", "School District" };
var attributesToDisplay = new Dictionary<string, object>();
foreach (var item in feature.Attributes)
if (fieldsToDisplay.Contains(item.Key))
attributesToDisplay[item.Key] = item.Value;
if (result.LayerId == 4)
IdentifyDetailsDataGrid.ItemsSource = attributesToDisplay;
if (result.LayerId == 9)
IdentifyDetailsDataGrid2.ItemsSource = attributesToDisplay;
if (result.LayerId == 14)
IdentifyDetailsDataGrid3.ItemsSource = attributesToDisplay;
}
//IdentifyComboBox.SelectedIndex = 0;
}