zoukankan      html  css  js  c++  java
  • 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("
    ", lstFields.ToArray()));
                        strBuilder.AppendLine("</Row>");
                        break;
                    case "CSV":
                        strBuilder.AppendLine(String.Join("	", 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("
    ", "").Replace("
    ", ""));
                }
                return data;
            }
        }

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

  • 相关阅读:
    mysql使用笔记
    js this指向练习题
    for in 和for of的区别
    ES6 Iterator(迭代器或遍历器)和 Generator (生成器)
    vue兄弟之间传值 bus中央事件总线
    关于recycleview 滑动item变长(item变形)问题
    蓝牙篇
    如何限制应用安装,
    网络工具,通过该类可以直接监听网络状态改变
    MyRecycleView带有上拉加载更多
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3228541.html
Copyright © 2011-2022 走看看