none
一个“DataGrid”导出方法 RRS feed

  • 问题

  • public static string ExportDataGrid(bool withHeaders, DataGrid grid)
      {

      System.Reflection.PropertyInfo propInfo;
      System.Windows.Data.Binding binding;
      var strBuilder = new System.Text.StringBuilder();
      var source = (grid.ItemsSource as System.Collections.IList);
      if (source == null) return "";
      var 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)
      {
      var csvRow = new List<string>();
      foreach (DataGridColumn col in grid.Columns)
      {
      if (col is DataGridBoundColumn)
      {
      binding = (col as DataGridBoundColumn).Binding;
      string 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();
      }


    错误 2 “System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.DataGridColumn>”不包含“ToList”的定义,并且找不到可接受类型为“System.Collections.ObjectModel.ObservableCollection<System.Windows.Controls.DataGridColumn>”的第一个参数的扩展方法“ToList”(是否缺少 using 指令或程序集引用?) C:\Users\Administrator\Desktop\Tj1.1\MyCharts\Common.cs 604 26 MyCharts


    问题:
    “System.Collections.ObjectModel.ObservableCollection”集合不能做“ToList”这样的转化???

    另外一个大师介绍的方法:

    http://www.codeproject.com/Articles/45731/Export-Silverlight-DataGrid-to-Excel-XML-CSV?msg=4328649#xx4328649xx

    方法很好,但问题是“汉字”会出现乱码啊。

    乱码如下:


    Science and technology is my lover.

    2012年8月3日 11:25

答案

  • Hi,

    ObservableCollection<string> oc = new ObservableCollection<string>();
                var list = oc.ToList();

    toList() 是System.Linq 中的扩展法方法.

    using System.Linq;即可.

    你好,这个大师的代码我没有尝试过,

    但是你看到里面有一句话:

    sw.WriteLine("<?xml version=\"1.0\" " +  "encoding=\"utf-8\"?>");
    

    我建议你尝试下GB2312.
    • 已标记为答案 Otomii Lu 2012年8月14日 7:07
    2012年8月6日 6:38
  • 你好,

    新的问题可以开个新的帖子询问么?

    请把刚才那句话改成以下,然后进行尝试

    sw.WriteLine("<?xml version=\"1.0\" " +  "encoding=\"GB2312\"?>");

    • 已标记为答案 Otomii Lu 2012年8月14日 7:07
    2012年8月7日 3:10

全部回复

  • Hi,

    ObservableCollection<string> oc = new ObservableCollection<string>();
                var list = oc.ToList();

    toList() 是System.Linq 中的扩展法方法.

    using System.Linq;即可.

    你好,这个大师的代码我没有尝试过,

    但是你看到里面有一句话:

    sw.WriteLine("<?xml version=\"1.0\" " +  "encoding=\"utf-8\"?>");
    

    我建议你尝试下GB2312.
    • 已标记为答案 Otomii Lu 2012年8月14日 7:07
    2012年8月6日 6:38
  • Hi,

    ObservableCollection<string> oc = new ObservableCollection<string>();
                var list = oc.ToList();

    toList() 是System.Linq 中的扩展法方法.

    using System.Linq;即可.

    你好,这个大师的代码我没有尝试过,

    但是你看到里面有一句话:

    sw.WriteLine("<?xml version=\"1.0\" " +  "encoding=\"utf-8\"?>");

    我建议你尝试下GB2312.

    谢谢大师。。。

         1、using System.Linq;即可。。。嗯,是这样的滴。。。

         2、sw.WriteLine("<?xml version=\"1.0\" " + "encoding=\"utf-8\"?>");。。。这样不行。。。

    另外还有一个问题,还请大师指教。

        1、Silverlight中“图片”怎样导出为Pdf???

    生成图片方法。
        
      public static void SaveToImage(Chart chart)
      {

      try
      {

      WriteableBitmap bitmap = new WriteableBitmap(chart, null);



      if (bitmap != null)
      {

      SaveFileDialog saveDlg = new SaveFileDialog();

      saveDlg.Filter = "JPEG Files (*.jpeg)|*.jpeg";

      saveDlg.DefaultExt = ".jpeg";



      if ((bool)saveDlg.ShowDialog())
      {

      using (Stream fs = saveDlg.OpenFile())
      {

      MemoryStream stream = GetImageStream(bitmap);



      //Get Bytes from memory stream and write into IO stream

      byte[] binaryData = new Byte[stream.Length];

      long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);

      fs.Write(binaryData, 0, binaryData.Length);

      }

      }

      }

      }

      catch (Exception ex)
      {

      System.Diagnostics.Debug.WriteLine("Note: Please make sure that Height and Width of the chart is set properly.");

      System.Diagnostics.Debug.WriteLine(ex.Message);

      }

      }

        
      怎样将“图片”转化为“pdf”???


    2、可不可以将“生成的图片”和“生成的Excel”合在一起,导出为“Pdf”???

      Excel生成方法如下:
      public static void ExportDataGridSaveAs(bool withHeaders, DataGrid grid)
      {
      string data = ExportDataGrid(true, grid);
      var sfd = new SaveFileDialog
      {
      DefaultExt = "csv",
      Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*",
      FilterIndex = 1
      };
      if (sfd.ShowDialog() == true)
      {
      using (Stream stream = sfd.OpenFile())
      {
      using (var writer = new StreamWriter(stream, System.Text.Encoding.Unicode))
      {
      data = data.Replace(",", "\t");
      writer.Write(data);
      writer.Close();
      }
      stream.Close();
      }
      }
      }
        
      有没有类似的实例可以参考???


    Science and technology is my lover.


    2012年8月7日 3:03
  • 你好,

    新的问题可以开个新的帖子询问么?

    请把刚才那句话改成以下,然后进行尝试

    sw.WriteLine("<?xml version=\"1.0\" " +  "encoding=\"GB2312\"?>");

    • 已标记为答案 Otomii Lu 2012年8月14日 7:07
    2012年8月7日 3:10