silverlight中datagrid数据到处excel

首先新建一个DataGrdiExtensions类,代码为:

 public static class DataGridExtensions
    {
        /// <summary>
        /// 导出dg中数据,成功返回true,失败返回false
        /// </summary>
        /// <param name="dg"></param>
        /// <returns></returns>
        public static bool Export(this DataGrid dg)
        {
            return ExportDataGrid(dg);
        }

        /// <summary>
        /// 导出dGrid中数据,成功返回true,失败返回false
        /// </summary>
        /// <param name="dGrid"></param>
        /// <returns></returns>
        public static bool ExportDataGrid(DataGrid dGrid)
        {
            bool exportOK = false;

            #region 导出数据
            try
            {
                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 false;
                    List<string> lstFields = new List<string>();
                    if (dGrid.HeadersVisibility == DataGridHeadersVisibility.Column || dGrid.HeadersVisibility == DataGridHeadersVisibility.All)
                    {
                        foreach (DataGridColumn dgcol in dGrid.Columns)
                            lstFields.Add(FormatField(dgcol.Header.ToString(), strFormat));
                        BuildStringOfRow(strBuilder, lstFields, strFormat);
                    }
                    foreach (object data in dGrid.ItemsSource)
                    {
                        lstFields.Clear();
                        foreach (DataGridColumn col in dGrid.Columns)
                        {
                            string strValue = "";
                            Binding objBinding = null;
                            if (col is DataGridBoundColumn)
                                objBinding = (col as DataGridBoundColumn).Binding;
                            if (col is DataGridTemplateColumn)
                            {
                                //This is a template column... let us see the underlying dependency object
                                DependencyObject objDO = (col as DataGridTemplateColumn).CellTemplate.LoadContent();
                                FrameworkElement oFE = (FrameworkElement)objDO;
                                FieldInfo oFI = oFE.GetType().GetField("TextProperty");
                                if (oFI != null)
                                {
                                    if (oFI.GetValue(null) != null)
                                    {
                                        if (oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(null)) != null)
                                            objBinding = oFE.GetBindingExpression((DependencyProperty)oFI.GetValue(null)).ParentBinding;
                                    }
                                }
                            }
                            if (objBinding != null)
                            {
                                if (objBinding.Path.Path != "")
                                {
                                    PropertyInfo pi = data.GetType().GetProperty(objBinding.Path.Path);
                                    if (pi != null) strValue = pi.GetValue(data, null).ToString();
                                }
                                if (objBinding.Converter != null)
                                {
                                    if (strValue != "")
                                        strValue = objBinding.Converter.Convert(strValue, typeof(string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString();
                                    else
                                        strValue = objBinding.Converter.Convert(data, typeof(string), objBinding.ConverterParameter, objBinding.ConverterCulture).ToString();
                                }
                            }
                            lstFields.Add(FormatField(strValue, strFormat));
                        }
                        BuildStringOfRow(strBuilder, lstFields, strFormat);
                    }
                    StreamWriter sw = new StreamWriter(objSFD.OpenFile(), System.Text.Encoding.Unicode);
                    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();
                    exportOK = true;
                }
            }
            catch (Exception ex)
            {
                exportOK = false;
                MessageBox.Show("保存失败:"+ex.Message);
            }
            #endregion

            return exportOK;

        }

        /// <summary>
        /// 设置datagrid中每一行的数据内容
        /// </summary>
        /// <param name="strBuilder"></param>
        /// <param name="lstFields"></param>
        /// <param name="strFormat"></param>
        private static void BuildStringOfRow(StringBuilder strBuilder, List<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("\t", lstFields.ToArray()));
                    break;
            }
        }

        /// <summary>
        /// 设置字符串输出格式
        /// </summary>
        /// <param name="data"></param>
        /// <param name="format"></param>
        /// <returns></returns>
        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;
        }
    }

导出数据时,只需要调用方法:datagrid.Export()即可

时间: 2024-10-04 17:45:59

silverlight中datagrid数据到处excel的相关文章

winform中 将DataGrid中的数据导入Excel中,并显示Excel应用程序

datagrid|excel|程序|数据|显示    /// <summary>        /// 将DataGrid中的数据导入Excel中,并显示Excel应用程序,        /// 注意调用该方法必须有安装Excel 2000应用程序,并且假定DataGrid中绑定的是一DataSet        /// </summary>        /// <param name="grid"></param>        /

.Net中导出数据到Excel(asp.net和winform程序中)_实用技巧

一.asp.net中导出Excel的方法: 在asp.net中导出Excel有两种方法,一种是将导出的文件存放在服务器某个文件夹下面,然后将文件地址输出在浏览器上:一种是将文件直接将文件输出流写给浏览器.在Response输出时,t分隔的数据,导出Excel时,等价于分列,n等价于换行. 1.将整个html全部输出Excel 此法将html中所有的内容,如按钮,表格,图片等全部输出到Excel中. 复制代码 代码如下: Response.Clear(); Response.Buffer= tru

请问制作的软件中输出数据到excel中能不能产生两个独立的画面?请问怎么做?谢谢

问题描述 请问制作的软件中输出数据到excel中能不能产生两个独立的画面?请问怎么做?谢谢 请问制作的软件中输出数据到excel中能不能产生两个独立的画面?请问怎么做?谢谢 解决方案 你说的画面是sheet吧 http://www.cnblogs.com/dyllove98/archive/2013/08/06/3241515.html

asp-从U8中导出数据到excel怎么在代码中绑定每个excel单元格的值?

问题描述 从U8中导出数据到excel怎么在代码中绑定每个excel单元格的值? 在U8中导出数据到excel中,怎么在代码中绑定每个单元格的数据?要先做好一个excel模板吗?重点是咋绑定赋值,求大神指点下,帮帮忙,跪谢

silverlight中DataGrid怎样设置默认项

问题描述 silverlight中DataGrid怎样设置默认选择一项的,现在系统是默认第一项的,我想把默认的第一项给取消掉,也就是不让其显示默认项,该怎样办!谢谢!!

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

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

关于DataGrid 数据导入Excel乱码

datagrid|excel|数据 当导数据到Excel 中时有时会出现乱码 原来代码 private static void WriteToExcelFromDataGrid(DataGrid dg, string fileName) { //StringWriter tw = new StringWriter(new CultureInfo( "zh-CHS", false)); StringWriter tw = new StringWriter(); HtmlTextWrite

如何导出DxGrid中的数据至Excel

问题描述 说明:DxGrid是在基于浏览器的WPF项目中使用了DevExpress中的一个控件,其数据是在后台通过代码生成的(包括数据列),如何将其中的数据导出至Excel中,希望各位高手指点... 解决方案 解决方案二:帮顶啦解决方案三:DevExpress的导出Excel还不简单,Winform直接.ExportToXls(fileName);Webform用.WriteXlsToResponse();解决方案四:是WPF应用程序既不同于Winform也不同于Web所以楼上说的方法在我这用不

将DataGrid数据写入Excel文件

datagrid|excel|数据 前几天项目中有个地方需要将DataGrid的数据直接导入Excel里,以提供给用户下载,在网上找了下,好像都是与下面代码类似的实现: 程序代码: this.EnableViewState   =   false;         System.Globalization.CultureInfo   myCItrad   =   new   System.Globalization.CultureInfo("ZH-CN",true);System.IO