Silverlight Datagrid 导出 Excel

注意:以下代码未经本人测试,仅供参考

 转自http://www.cnblogs.com/ijkjuxit/articles/2093076.html

void btnExport_Click(object sender, RoutedEventArgs e)
        {
            ExportExcel.ExportDataGridSaveAs(true,this.dg);

        }
        

导出类文件如下:

  public static class ExportExcel
    {
        #region 导出DataGrid数据到Excel

        /// <summary>
        /// CSV格式化
        /// </summary>
        /// <param name="data">数据</param>
        /// <returns>格式化数据</returns>
        private static string FormatCSVField(string data)
        {
            return String.Format("\"{0}\"", data.Replace("\"", "\"\"\"").Replace("\n", "").Replace("\r", ""));
        }

        /// <summary>
        /// 导出DataGrid数据到Excel
        /// </summary>
        /// <param name="withHeaders">是否需要表头</param>
        /// <param name="grid">DataGrid</param>
        /// <returns>Excel内容字符串</returns>
        public static string ExportDataGrid(bool withHeaders, DataGrid grid)
        {
            string colPath; System.Reflection.PropertyInfo propInfo;
            System.Windows.Data.Binding binding;
            System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
            System.Collections.IList source = (grid.ItemsSource as System.Collections.IList);
            if (source == null) return "";
            List<string> headers = new List<string>();
            grid.Columns.ToList().ForEach(col =>
            {
                if (col is DataGridBoundColumn)
                { headers.Add(FormatCSVField(col.Header.ToString())); }
            });
            strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
            foreach (Object data in source)
            {
                List<string> csvRow = new List<string>();
                foreach (DataGridColumn col in grid.Columns)
                {
                    if (col is DataGridBoundColumn)
                    {
                        binding = (col as DataGridBoundColumn).Binding;
                        colPath = binding.Path.Path;
                        propInfo = data.GetType().GetProperty(colPath);
                        if (propInfo != null)
                        {
                            csvRow.Add(FormatCSVField(propInfo.GetValue(data, null).ToString()));
                        }
                    }
                }
                strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
            }
            return strBuilder.ToString();
        }
        /// <summary>
        /// 导出DataGrid数据到Excel
        /// </summary>
        /// <param name="withHeaders">是否需要表头</param>
        /// <param name="grid">DataGrid</param>
        /// <returns>Excel内容字符串</returns>
        public static string ExportDataGrid(bool withHeaders, DataGrid grid, bool dataBind)
        {
            string colPath;
            System.Reflection.PropertyInfo propInfo;
            System.Windows.Data.Binding binding;
            System.Text.StringBuilder strBuilder = new System.Text.StringBuilder();
            System.Collections.IList source = (grid.ItemsSource as System.Collections.IList);
            if (source == null) return "";
            List<string> headers = new List<string>();
            grid.Columns.ToList().ForEach(col =>
            {
                if (col is DataGridTemplateColumn)
                {
                    if (col.Header != null)
                    {
                        headers.Add(FormatCSVField(col.Header.ToString()));
                    }
                    else
                    {
                        headers.Add(string.Empty);
                    }
                }
            });
            strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
            foreach (Object data in source)
            {
                List<string> csvRow = new List<string>();
                foreach (DataGridColumn col in grid.Columns)
                {
                    if (col is DataGridTemplateColumn)
                    {
                        FrameworkElement cellContent = col.GetCellContent(data);
                        TextBlock block = null;
                        if (cellContent.GetType() == typeof(Grid))
                        {
                            block = cellContent.FindName("TempTextblock") as TextBlock;
                        }
                        else
                        {
                            block = cellContent as TextBlock;
                        }
                        if (block != null)
                        {
                            csvRow.Add(FormatCSVField(block.Text));
                        }
                    }
                }
                strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
                //strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t");
            }
            return strBuilder.ToString();
        }
        /// <summary>
        /// 导出DataGrid数据到Excel为CVS文件
        /// 使用utf8编码 中文是乱码  改用Unicode编码
        /// 
        /// </summary>
        /// <param name="withHeaders">是否带列头</param>
        /// <param name="grid">DataGrid</param>
        public static void ExportDataGridSaveAs(bool withHeaders, DataGrid grid)
        {
            string data =ExportDataGrid(true, grid);
            SaveFileDialog sfd = new SaveFileDialog()
            {
                DefaultExt = "csv",
                Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
                FilterIndex = 1
            };
            if (sfd.ShowDialog() == true)
            {
                using (Stream stream = sfd.OpenFile())
                {
                    using (StreamWriter writer = new StreamWriter(stream, System.Text.UnicodeEncoding.Unicode))
                    {
                        data = data.Replace(",", "\t");
                        writer.Write(data);
                        writer.Close();
                    }
                    stream.Close();
                }
            }
        }

        #endregion 导出DataGrid数据到Excel

时间: 2024-10-01 19:25:10

Silverlight Datagrid 导出 Excel的相关文章

一个通用的Datagrid导出Excel打印的源函数

datagrid|excel|打印|导出excel|函数 一个通用的Datagrid导出Excel打印的源函数闲暇之余,写成函数,供新人研究学习 'Power by:Landlordh '列宽默认为datagird的tablestyles(0)列宽的五分之一 'G2E(dg1) Public Function G2E(ByVal dg As DataGrid) Dim dt As New DataTable Try dt = CType(dg.DataSource, DataTable) Cat

求助:C#中datagrid导出excel时遇到的问题

问题描述 在网上搜了段datagrid导出excel的程序,打算试一下,但是出现了些问题,stringlist定义都画红线,如图所示,添加了usingSystem.Collections.Generic;求助各位大神怎么回事,或者有其他导出的方法 解决方案 解决方案二:取DataGrid的数据源.解决方案三:鼠标放到划红线的地方不是有提示的吗?解决方案四:把报错的地方改掉解决方案五:报错信息是什么?

asp.net datagrid 导出excel二种方法

asp教程.net datagrid 导出excel二种方法 文章为你提供二款datagrid 导出excel的代码一款是利用vb.net 导出excel一种是利用c# datagrid 导出excel的实例代码. */ //c#:   private void exporttoexcel()         {             savefiledialog savefiledialog = new savefiledialog();             savefiledialog

DataGrid - 导出Excel文件

datagrid|excel|导出excel 方法有很多,我只用了最简单的方法 1.引用 COM组件 Excel.dll 2.实现如下 public void ExportExcel(){ DataSet ds=this.DataSet;//取得dataGrid绑定的DataSet if(ds==null) return; string saveFileName=""; bool fileSaved=false; SaveFileDialog saveDialog=new SaveFi

asp.net c# datagrid 导出excel 的对齐问题

问题描述 导出的数据文本左对齐数字右对齐怎么统一?谢谢 解决方案 解决方案二:protectedvoidexcel_Click(objectsender,EventArgse){Response.Clear();SqlDataAdapterda=newSqlDataAdapter("select*fromTEL_ID",conn);DataSetds=newDataSet();da.Fill(ds,"TEL_INFO");DataTabledt=ds.Tables[

一起谈.NET技术,Silverlight 4中把DataGrid数据导出Excel—附源码下载

Silverlight中常常用到DataGrid来展示密集数据. 而常见应用系统中我们需要把这些数据导入导出到固定Office套件中例如常用的Excel表格. 那么在Silverlight 中如何加以实现? 在参考大量资料后 提供参考思路如下: A:纯客户端导出处理.利用Silverlight 与Javascript 进行交互实现导出Excel. B:服务器端导出.获得DataGrid数据源. 传递给WCF Service到服务器端. 然后把传回数据通过Asp.net中通用处理导出Excel方法

实现easyui的datagrid导出为excel的示例代码_jquery

之前有介绍过如何实现easyui里datagrid内容的打印,今天给大家介绍下如何实现datagrid内容导出为excel文件.以下为代码实现: export.js function ChangeToTable(printDatagrid) { var tableString = '<table cellspacing="0" class="pb">'; var frozenColumns = printDatagrid.datagrid("o

easyui datagrid 导出数据到excel

问题描述 easyui datagrid 导出数据到excel 点击导出,将数据到出到excel , 模板如下 解决方案 将datagrid数据导出到excelDataGrid中的数据导出到EXCEL导出DataGrid中的数据到Excel 解决方案二: easyui datagrid数据导出excel文件 解决方案三: 利用一个超链接,传送到后台当前页的数字,比如:nowPager=3,然后后台读取这页的数据,然后利用poi-3.1-FINAL.jar这个第三方的库导出数据到Excel, 如何

asp.net+datagrid +aspnetpager+分页存储过程如何导出EXCEL

问题描述 asp.net+datagrid+aspnetpager+分页存储过程如何导出EXCEL,目前只能导出当前页. 解决方案 解决方案二:导出绑定datagrid的Datset就可以了...解决方案三:存储过程已经分页了,也就是说DATASET的数据就是当前数据.解决方案四:aspnetpager或存储过程分页无法获取全部数据的(当然如何你全部数据少于pagesize例外)这样的话,我想要重新用一个查询去获取全部数据到DataSet了,然后再导出DataSet中的数据,这样才是全部数据解决