微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Silverlight 导出excel 二

 

xaml:

<Grid x:Name="LayoutRoot" Background="White">
       <Grid.ColumnDeFinitions>
           <ColumnDeFinition></ColumnDeFinition>
       </Grid.ColumnDeFinitions>
       <Grid.RowDeFinitions>
           <RowDeFinition Height="20"></RowDeFinition>
           <RowDeFinition Height="20"></RowDeFinition>
           <RowDeFinition></RowDeFinition>
       </Grid.RowDeFinitions>
       <Button x:Name="btnSave" Grid.Column="0" Grid.Row="0" Content="保存" Click="btnSave_Click" />
       <data:DataGrid Grid.Row="2" Grid.Column="0" Name="dg" AutoGenerateColumns="True"/>
   </Grid>

 

后台

public MainPage()
      {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(MainPage_Loaded);
      }

      void MainPage_Loaded(object sender,RoutedEventArgs e)
      {
          List<DataTest> lists =new List<DataTest>();
          lists.Add(new Datatest() { coloum1 = "213",coloum2 = "123213",coloum3 = "123213",coloum4 = "123" });
          lists.Add(new Datatest() { coloum1 = "213",coloum4 = "123" });
          dg.ItemsSource = lists;
      }

      private void btnSave_Click(object sender,RoutedEventArgs e)
      {
          string data = AppCode.ExportDataGrid(true,this.dg,true);
          SaveFileDialog sfd = new SaveFileDialog();
          sfd.DefaultExt = "csv";
          sfd.Filter = "CSV Files (*.csv)|*.csv|All files (*.*)|*.*";

          sfd.FilterIndex = 1;

          if (sfd.ShowDialog() == true)
          {
              using (Stream stream = sfd.OpenFile())
              {
                  //用utf8编码
                  Byte[] fileContent = System.Text.UTF8Encoding.UTF8.GetBytes(data);
                  stream.Write(fileContent,fileContent.Length);
                  stream.Close();
              }
          }
      }

  }

/--------------------

  public class DataTest
  {
      public string coloum1
      {
          get;
          set;
      }
      public string coloum2
      {
          get;
          set;
      }
      public string coloum3
      {
          get;
          set;
      }
      public string coloum4
      {
          get;
          set;
      }

 

/-------------------

/// <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 DataGridTextColumn)
               {
                   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 DataGridTextColumn)
                   {
                       FrameworkElement cellContent = col.GetCellContent(data);
                       TextBlock block = cellContent as TextBlock;
                       if (block != null)
                       {
                           csvRow.Add(FormatCSVField(block.Text));
                       }
                   }
               }
               strBuilder.Append(String.Join(",csvRow.ToArray())).Append("\r\n");
           }
           return strBuilder.ToString();

       }

 

http://www.cnblogs.com/3_mu/articles/1651153.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐