using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using ESRI.ArcGIS.Client;
using ESRI.ArcGIS.Client.Tasks;
namespace ExportTest
{
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
}
void QueryButton_Click(object sender, RoutedEventArgs e)
{
QueryTask queryTask =
new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");
queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
queryTask.Failed += QueryTask_Failed;
ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
query.Text = StateNameTextBox.Text;
query.OutFields.Add("*");
queryTask.ExecuteAsync(query);
}
void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
{
FeatureSet featureSet = args.FeatureSet;
if (featureSet != null && featureSet.Features.Count > 0)
{
QueryDetailsDataGrid.ItemsSource = args.FeatureSet;
}
else
MessageBox.Show("No features returned from query");
}
private void QueryTask_Failed(object sender, TaskFailedEventArgs args)
{
MessageBox.Show("Query execute error: " + args.Error);
}
private void Excel_Click(object sender, RoutedEventArgs e)
{
DataGridExtensions.ExportDataGrid(QueryDetailsDataGrid, null);
}
}
public static class DataGridExtensions
{
public static void Export(this DataGrid dg, List<string> excludedColumns)
{
ExportDataGrid(dg, excludedColumns);
}
public static void ExportDataGrid(DataGrid dGrid, List<string> excludedColumns)
{
SaveFileDialog objSFD = new SaveFileDialog() { DefaultExt = "csv", Filter = "CSV Files (*.csv)|*.csv|Excel XML (*.xml)|*.xml|All files (*.*)|*.*", FilterIndex = 1 };
if (objSFD.ShowDialog() == true)
{
string strFormat = objSFD.SafeFileName.Substring(objSFD.SafeFileName.IndexOf('.') + 1).ToUpper();
StringBuilder strBuilder = new StringBuilder();
if (dGrid.ItemsSource == null) return;
if (dGrid.HeadersVisibility == DataGridHeadersVisibility.Column || dGrid.HeadersVisibility == DataGridHeadersVisibility.All)
{
var listFields = from col in dGrid.Columns
where excludedColumns == null || !excludedColumns.Contains(col.Header.ToString())
select col.Header.ToString();
BuildStringOfRow(strBuilder, listFields, strFormat);
}
foreach (Graphic data in dGrid.ItemsSource)
{
var listFields = from col in dGrid.Columns
where excludedColumns == null || !excludedColumns.Contains(col.Header.ToString())
select GetValue(col.GetCellContent(data));
BuildStringOfRow(strBuilder, listFields, strFormat);
}
StreamWriter sw = new StreamWriter(objSFD.OpenFile());
if (strFormat == "XML")
{
//Let us write the headers for the Excel XML
sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sw.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>");
sw.WriteLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\">");
sw.WriteLine("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
sw.WriteLine("<Author>Arasu Elango</Author>");
sw.WriteLine("<Created>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</Created>");
sw.WriteLine("<LastSaved>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</LastSaved>");
sw.WriteLine("<Company>Atom8 IT Solutions (P) Ltd.,</Company>");
sw.WriteLine("<Version>12.00</Version>");
sw.WriteLine("</DocumentProperties>");
sw.WriteLine("<Worksheet ss:Name=\"Silverlight Export\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">");
sw.WriteLine("<Table>");
}
sw.Write(strBuilder.ToString());
if (strFormat == "XML")
{
sw.WriteLine("</Table>");
sw.WriteLine("</Worksheet>");
sw.WriteLine("</Workbook>");
}
sw.Close();
}
}
private static string GetValue(FrameworkElement frameworkElement)
{
return frameworkElement == null ? null
: (frameworkElement is TextBlock ? (frameworkElement as TextBlock).Text : frameworkElement.ToString());
}
private static void BuildStringOfRow(StringBuilder strBuilder, IEnumerable<string> lstFields, string strFormat)
{
switch (strFormat)
{
case "XML":
strBuilder.AppendLine("<Row>");
strBuilder.AppendLine(String.Join("\r\n", lstFields.ToArray()));
strBuilder.AppendLine("</Row>");
break;
case "CSV":
strBuilder.AppendLine(String.Join(",", lstFields.ToArray()));
break;
}
}
private static string FormatField(string data, string format)
{
switch (format)
{
case "XML":
return String.Format("<Cell><Data ss:Type=\"String\">{0}</Data></Cell>", data);
case "CSV":
return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
}
return data;
}
}
}
Solved! Go to Solution.
private static string GetValue(DataGridColumn col, Graphic graphic)
{
if (col is DataGridBoundColumn)
{
var path = (col as DataGridBoundColumn).Binding.Path.Path;
var att = Regex.Replace(path, ".*\\[(.*)\\]", "$1");
return graphic.Attributes[att].ToString();
}
return string.Empty;
} if (col is DataGridBoundColumn)
{
var path = (col as DataGridBoundColumn).Binding.Path.Path;
var att = Regex.Replace(path, ".*\\[(.*)\\]", "$1");
return graphic.Attributes[att].ToString();
}
return string.Empty;private static string GetValue(DataGridColumn col, Graphic graphic) { if (col is DataGridBoundColumn) { var path = (col as DataGridBoundColumn).Binding.Path.Path; var att = Regex.Replace(path, ".*\\[(.*)\\]", "$1"); return graphic.Attributes[att] == null ? string.Empty : graphic.Attributes[att].ToString(); } return string.Empty; } string strValue = string.Empty; strValue = data.Attributes[field].ToString();
string strValue = data.Attributes[field] != null ? data.Attributes[field].ToString() : string.Empty;
string strValue = string.Empty; strValue = data.Attributes[field.Header.ToString()].ToString();
string strValue = data.Attributes[field.Header.ToString()] != null ? data.Attributes[field.Header.ToString()].ToString() : string.Empty;
public static class DataGridExtensions
{
//added the extra parameter
public static void Export(this FeatureDataGrid dg, IEnumerable<Graphic> graphics, List<string> excludedColumns)
{
ExportDataGrid(dg, graphics, excludedColumns);
}
//added the extra parameter
public static void ExportDataGrid(FeatureDataGrid dGrid, IEnumerable<Graphic> graphics, List<string> excludedColumns)
{
SaveFileDialog objSFD = new SaveFileDialog() { DefaultExt = "csv", Filter = "CSV Files (*.csv)|*.csv|Excel XML (*.xml)|*.xml|All files (*.*)|*.*", FilterIndex = 1 };
if (objSFD.ShowDialog() == true)
{
string strFormat = objSFD.SafeFileName.Substring(objSFD.SafeFileName.IndexOf('.') + 1).ToUpper();
StringBuilder strBuilder = new StringBuilder();
if (dGrid.ItemsSource == null) return;
if (dGrid.HeadersVisibility == DataGridHeadersVisibility.Column || dGrid.HeadersVisibility == DataGridHeadersVisibility.All)
{
var listFields = from col in dGrid.Columns
where excludedColumns == null || !excludedColumns.Contains(col.Header.ToString())
select col.Header.ToString();
BuildStringOfRow(strBuilder, listFields, strFormat);
}
//this line changed a little
foreach (Graphic graphic in graphics)
{
var listValues = from col in dGrid.Columns
where excludedColumns == null || !excludedColumns.Contains(col.Header.ToString())
select GetValue(col, graphic);
BuildStringOfRow(strBuilder, listValues, strFormat);
}
StreamWriter sw = new StreamWriter(objSFD.OpenFile());
if (strFormat == "XML")
{
//Let us write the headers for the Excel XML
sw.WriteLine("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
sw.WriteLine("<?mso-application progid=\"Excel.Sheet\"?>");
sw.WriteLine("<Workbook xmlns=\"urn:schemas-microsoft-com:office:spreadsheet\">");
sw.WriteLine("<DocumentProperties xmlns=\"urn:schemas-microsoft-com:office:office\">");
sw.WriteLine("<Author>Arasu Elango</Author>");
sw.WriteLine("<Created>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</Created>");
sw.WriteLine("<LastSaved>" + DateTime.Now.ToLocalTime().ToLongDateString() + "</LastSaved>");
sw.WriteLine("<Company>Atom8 IT Solutions (P) Ltd.,</Company>");
sw.WriteLine("<Version>12.00</Version>");
sw.WriteLine("</DocumentProperties>");
sw.WriteLine("<Worksheet ss:Name=\"Silverlight Export\" xmlns:ss=\"urn:schemas-microsoft-com:office:spreadsheet\">");
sw.WriteLine("<Table>");
}
sw.Write(strBuilder.ToString());
if (strFormat == "XML")
{
sw.WriteLine("</Table>");
sw.WriteLine("</Worksheet>");
sw.WriteLine("</Workbook>");
}
sw.Close();
}
}
private static string GetValue(DataGridColumn col, Graphic graphic)
{
if (col is DataGridBoundColumn)
{
var path = (col as DataGridBoundColumn).Binding.Path.Path;
var att = Regex.Replace(path, ".*\\[(.*)\\]", "$1");
return graphic.Attributes[att].ToString();
}
return string.Empty;
}
private static void BuildStringOfRow(StringBuilder strBuilder, IEnumerable<string> lstFields, string strFormat)
{
switch (strFormat)
{
case "XML":
strBuilder.AppendLine("<Row>");
strBuilder.AppendLine(String.Join("\r\n", lstFields.ToArray()));
strBuilder.AppendLine("</Row>");
break;
case "CSV":
strBuilder.AppendLine(String.Join(",", lstFields.ToArray()));
break;
}
}
private static string FormatField(string data, string format)
{
switch (format)
{
case "XML":
return String.Format("<Cell><Data ss:Type=\"String\">{0}</Data></Cell>", data);
case "CSV":
return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
}
return data;
}
}
//handle the Export All To Excel click
private void exportAll_Click(object sender, RoutedEventArgs e)
{
FeatureLayer fe = (FeatureLayer)MyMap.Layers["California"];
//ete.ExportData(fe.Graphics.ToList(), MyDataGrid.Columns);
MyDataGrid.Export(fe.Graphics, null);
}
private void exportSelected_Click(object sender, RoutedEventArgs e)
{
FeatureLayer fe = (FeatureLayer)MyMap.Layers["California"];
//ete.ExportData(fe.SelectedGraphics.ToList(), MyDataGrid.Columns);
MyDataGrid.Export(fe.SelectedGraphics.ToList(), null);
}
return graphic.Attributes[att] == null ? string.Empty : graphic.Attributes[att].ToString();