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", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", coloum4 = "123" });
          lists.Add(new DataTest() { coloum1 = "213", coloum2 = "123213", coloum3 = "123213", 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, 0, 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值