推荐文章

Winform 全屏显示

Winform 全屏显示

Winform程序无边框、置顶、全屏显示
WPF之Image控件

WPF之Image控件

Image控件加载图片包括加载动态图片,加载静态图片两种方式。加载动态图片通过生成一个BitmapImage,创建该对象后,赋给Image的Source即可。加载的形式:BitmapImage myBitmapImage =new BitmapImage();myBitmapImage.BeginInit();取得数据库存储的图片字段,MSSQL的Image类型Byte[] mybyte = Re
wpf list<T>与ObservableCollection<T>的区别

wpf list<T>与ObservableCollection<T>的区别

List《T》与ObservableCollection《T》的用法基本上是一样的。区别:list《T》:当T继承于INotifyPropertyChanged时,如果list《T》中的属性发生改变,则通知UI属性值已发生改变。但当list《T》添加一项时,list《T》就无法通知前端UI了(此时,ObservableCollection《T》闪亮登场)。ObservableCollection《
WPF调用线程复制文件并显示进度条

WPF调用线程复制文件并显示进度条

在WPF中复制文件时,如何调用线程,显示进度条。《Window x:Class="WpfThreadTest.MainWindow"xmlns="http:schemas.microsoft.comwinfx2006xamlpresentation"xmlns:x="http:schemas.microsoft.comwinfx2006xaml"Title="MainWindow" Closed=
WPF中对XML的读写

WPF中对XML的读写

已知有一个XML文件(bookste.xml)如下:《?xmlversion="1.0" encoding="gb2312"?》《bookste》《bookgenre="fantasy" ISBN="236314"》《title》OberonsLegacy《title》《auth》Cets,Eva《auth》《price》5.95《price》《book》《bookste》 1、往《bookste

WPF导出CSV

日期:2018-08-17 点击:1502 来源:PB2.CN

CSV是一种简单的数据文件交换方式,体积小、操作占用内存小、 生成速度快、行数无限制。
CSV 的基本规则
1、开头是不留空,以行为单位。
2、可含或不含列名,含列名则居文件第一行。
3、一行数据不跨行,无空行。
4、以半角逗号(即,)作分隔符,列为空也要表达其存在。
5、列内容如存在半角逗号(即,)则用半角双引号(即"")将该字段值包含起来。
6、列内容如存在半角引号(即")则应替换成半角双引号("")转义,并用半角引号(即"")将该字段值包含起来。
7、文件读写时引号,逗号操作规则互逆。
8、内码格式不限,可为 ASCII、Unicode 或者其他。
9、不支持特殊字符


导出CSV

#region  wpf客户端 导出DataGrid数据到CSV
/// <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>
/// <param name="dataBind"></param>
/// <returns>Excel内容字符串</returns>
public static string ExportDataGrid(bool withHeaders, System.Windows.Controls.DataGrid grid, bool dataBind)
{
    try
    {
           var strBuilder = new System.Text.StringBuilder();
           var source = (grid.ItemsSource as System.Collections.IList);
           if (source == null) return "";
           var headers = new List<string>();
           List<string> bt = new List<string>();
           foreach (var hr in grid.Columns)
           {
               //   DataGridTextColumn textcol = hr. as DataGridTextColumn;
               headers.Add(hr.Header.ToString());
               if (hr is DataGridTextColumn)//列绑定数据
               {
           DataGridTextColumn textcol = hr as DataGridTextColumn;
           if (textcol != null)
               bt.Add((textcol.Binding as Binding).Path.Path.ToString());//获取绑定源     
               }else if(hr is DataGridTemplateColumn)
               {
                      if(hr.Header.Equals("操作"))
                      bt.Add("Id");
               }
               else
               {
               }
           }
           strBuilder.Append(String.Join(",", headers.ToArray())).Append("\r\n");
           foreach (var data in source)
           {
               var csvRow = new List<string>();
              foreach(var ab in bt)
              {
                  string s = ReflectionUtil.GetProperty(data, ab).ToString();
                  if(s!=null)
                  {
                    csvRow.Add(FormatCsvField(s));
                  }
                  else
                  {
                     csvRow.Add("\t");
                  }
              }
               strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n");
              // strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\t");
           }
           return strBuilder.ToString();
     }catch(Exception ex)
    {
           LogHelper.Error(ex);
           return "";
    }
}
/// <summary>
/// 导出DataGrid数据到Excel为CVS文件
/// 使用utf8编码 中文是乱码 改用Unicode编码
///
/// </summary>
/// <param name="withHeaders">是否带列头</param>
/// <param name="grid">DataGrid</param>
public static void ExportDataGridSaveAs(bool withHeaders, System.Windows.Controls.DataGrid grid)
{
    try
    {
           string data = ExportDataGrid(true, grid, true);
           var sfd = new Microsoft.Win32.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();
        }
      }
        MessageBox.Show("导出成功!");
    }catch(Exception ex)
    {
 
    }
}
#endregion 导出DataGrid数据到CSV


这篇文档对您是否有帮助?

Winform 全屏显示

Winform 全屏显示

Winform程序无边框、置顶、全屏显示
WPF之Image控件

WPF之Image控件

Image控件加载图片包括加载动态图片,加载静态图片两种方式。加载动态图片通过生成一个BitmapImage,创建该对象后,赋给Image的Source即可。加载的形式:BitmapImage myBitmapImage =new BitmapImage();myBitmapImage.BeginInit();取得数据库存储的图片字段,MSSQL的Image类型Byte[] mybyte = Re
wpf list<T>与ObservableCollection<T>的区别

wpf list<T>与ObservableCollection<T>的区别

List《T》与ObservableCollection《T》的用法基本上是一样的。区别:list《T》:当T继承于INotifyPropertyChanged时,如果list《T》中的属性发生改变,则通知UI属性值已发生改变。但当list《T》添加一项时,list《T》就无法通知前端UI了(此时,ObservableCollection《T》闪亮登场)。ObservableCollection《
WPF调用线程复制文件并显示进度条

WPF调用线程复制文件并显示进度条

在WPF中复制文件时,如何调用线程,显示进度条。《Window x:Class="WpfThreadTest.MainWindow"xmlns="http:schemas.microsoft.comwinfx2006xamlpresentation"xmlns:x="http:schemas.microsoft.comwinfx2006xaml"Title="MainWindow" Closed=
WPF中对XML的读写

WPF中对XML的读写

已知有一个XML文件(bookste.xml)如下:《?xmlversion="1.0" encoding="gb2312"?》《bookste》《bookgenre="fantasy" ISBN="236314"》《title》OberonsLegacy《title》《auth》Cets,Eva《auth》《price》5.95《price》《book》《bookste》 1、往《bookste