/// <summary> /// 对绑定值进行转换 /// </summary> /// <param name="strColumnValue"></param> /// <returns></returns> private static Binding GetColumnBinding(string strColumnValue) { Binding binding = new Binding(); if (string.IsNullOrWhiteSpace(strColumnValue)) { binding = new Binding(strColumnValue); return(binding); } string[] strlist = strColumnValue.Split(','); if (strlist.Length != 3) { binding = new Binding(strColumnValue); return(binding); } switch (strlist[2].ToString().ToUpper()) { case "DICTIONARYCONVERTER": DictionaryConverter dic = new DictionaryConverter(); binding = new Binding(strlist[0].ToString()) { Converter = dic, ConverterParameter = strlist[1].ToString() }; break; case "CUSTOMDATECONVERTER": CustomDateConverter dat = new CustomDateConverter(); binding = new Binding(strlist[0].ToString()) { Converter = dat, ConverterParameter = strlist[1].ToString() }; break; } return(binding); }
/// <summary> /// 对绑定值进行转换 /// </summary> /// <param name="strColumnValue"></param> /// <returns></returns> private static Binding GetColumnBinding(string strColumnValue) { Binding binding = new Binding(); if (string.IsNullOrWhiteSpace(strColumnValue)) { binding = new Binding(strColumnValue); return binding; } string[] strlist = strColumnValue.Split(','); if (strlist.Length != 3) { binding = new Binding(strColumnValue); return binding; } switch (strlist[2].ToString().ToUpper()) { case "DICTIONARYCONVERTER": DictionaryConverter dic = new DictionaryConverter(); binding = new Binding(strlist[0].ToString()) { Converter = dic, ConverterParameter = strlist[1].ToString() }; break; case "CUSTOMDATECONVERTER": CustomDateConverter dat = new CustomDateConverter(); binding = new Binding(strlist[0].ToString()) { Converter = dat, ConverterParameter = strlist[1].ToString() }; break; } return binding; }
//public static void Export2CSV(DataGrid dtGrid, IEnumerable ItemsSource,string fileName) //{ // string csvStr = ConverDataSet2CSV(dtGrid,ItemsSource); // if(csvStr=="") return; // FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); // //将string转换成byte[] // byte[] csvArray = System.Text.Encoding.UTF8.GetBytes(csvStr.ToCharArray(), 0, csvStr.Length - 1); // fs.Write(csvArray,0,csvStr.Length - 1); // fs.Close(); // fs = null; //} ///// <summary> ///// 将指定的数据集中指定的表转换成CSV字符串 ///// </summary> ///// <param name="dataGrid"></param> ///// <param name="tableName"></param> ///// <returns></returns> //private static string ConverDataSet2CSV(DataGrid dataGrid, IEnumerable ItemsSource) //{ // //首先判断数据集中是否包含指定的表 // if (dataGrid == null || dataGrid.ItemsSource==null) // { // MessageBox.Show("指定的数据集为空或不包含要写出的数据表!"); // return ""; // } // string csvStr = ""; // //下面写出数据 // //DataTable tb = dataGrid.Tables[tableName]; // //写表名 // //csvStr += tb.TableName + "\n"; // //第一步:写出列名 // foreach (var column in dataGrid.Columns) // { // if(column is DataGridTextColumn) // { // DataGridTextColumn item=column as DataGridTextColumn; // csvStr += "\""+column.Header.ToString() +"\"" +","; // } // } // //去掉最后一个"," // csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1); // csvStr += "\n"; // //第二步:写出数据 // foreach (var row in ItemsSource) // { // if(row is DateTime) // { // CustomDateConverter converter=new CustomDateConverter(); // converter.Convert(row,"DATE"); // } // foreach (DataColumn column in tb.Columns) // { // csvStr += "\"" + row[column].ToString() + "\"" + ","; // } // csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1); // csvStr += "\n"; // } // return csvStr; //} #endregion /// <summary> /// 导出DataGrid数据到Excel /// </summary> /// <param name="withHeaders">是否需要表头</param> /// <param name="grid">DataGrid</param> /// <returns>Excel内容字符串</returns> public static string ExportDataGrid(bool withHeaders, DataGrid grid) { System.Reflection.PropertyInfo propInfo; System.Windows.Data.Binding binding; var strBuilder = new System.Text.StringBuilder(); DictionaryConverter dicConverter = new DictionaryConverter(); var source = (grid.ItemsSource as System.Collections.IList); if (source == null) { return(""); } var headers = new List <string>(); grid.Columns.ForEach(col => { if (col is DataGridBoundColumn) { string strHeader = ConvertDic(col.Header.ToString()); headers.Add(FormatCsvField(strHeader)); } }); 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) { try { if (col is DataGridBoundColumn) { binding = (col as DataGridBoundColumn).Binding; string colPath = binding.Path.Path; string[] arr = colPath.Split('.'); string dicCategory = Convert.ToString(binding.ConverterParameter);//如有绑定字典值,则为字典类别 propInfo = data.GetType().GetProperty(colPath); object ob = data; if (arr.Length > 1) { ob = data.GetObjValue(arr[0]); propInfo = data.GetObjValue(arr[0]).GetType().GetProperty(arr[1]); } if (propInfo != null) { object obj = propInfo.GetValue(ob, null) == null ? null : propInfo.GetValue(ob, null).ToString(); obj = dicConverter.Convert(obj, null, dicCategory, null); string value = Convert.ToString(obj); csvRow.Add(FormatCsvField(value)); } } } catch { continue; } } strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n"); } return(strBuilder.ToString()); }
//public static void Export2CSV(DataGrid dtGrid, IEnumerable ItemsSource,string fileName) //{ // string csvStr = ConverDataSet2CSV(dtGrid,ItemsSource); // if(csvStr=="") return; // FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite); // //将string转换成byte[] // byte[] csvArray = System.Text.Encoding.UTF8.GetBytes(csvStr.ToCharArray(), 0, csvStr.Length - 1); // fs.Write(csvArray,0,csvStr.Length - 1); // fs.Close(); // fs = null; //} ///// <summary> ///// 将指定的数据集中指定的表转换成CSV字符串 ///// </summary> ///// <param name="dataGrid"></param> ///// <param name="tableName"></param> ///// <returns></returns> //private static string ConverDataSet2CSV(DataGrid dataGrid, IEnumerable ItemsSource) //{ // //首先判断数据集中是否包含指定的表 // if (dataGrid == null || dataGrid.ItemsSource==null) // { // MessageBox.Show("指定的数据集为空或不包含要写出的数据表!"); // return ""; // } // string csvStr = ""; // //下面写出数据 // //DataTable tb = dataGrid.Tables[tableName]; // //写表名 // //csvStr += tb.TableName + "\n"; // //第一步:写出列名 // foreach (var column in dataGrid.Columns) // { // if(column is DataGridTextColumn) // { // DataGridTextColumn item=column as DataGridTextColumn; // csvStr += "\""+column.Header.ToString() +"\"" +","; // } // } // //去掉最后一个"," // csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1); // csvStr += "\n"; // //第二步:写出数据 // foreach (var row in ItemsSource) // { // if(row is DateTime) // { // CustomDateConverter converter=new CustomDateConverter(); // converter.Convert(row,"DATE"); // } // foreach (DataColumn column in tb.Columns) // { // csvStr += "\"" + row[column].ToString() + "\"" + ","; // } // csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1); // csvStr += "\n"; // } // return csvStr; //} #endregion /// <summary> /// 导出DataGrid数据到Excel /// </summary> /// <param name="withHeaders">是否需要表头</param> /// <param name="grid">DataGrid</param> /// <returns>Excel内容字符串</returns> public static string ExportDataGrid(bool withHeaders, DataGrid grid) { System.Reflection.PropertyInfo propInfo; System.Windows.Data.Binding binding; var strBuilder = new System.Text.StringBuilder(); DictionaryConverter dicConverter = new DictionaryConverter(); var source = (grid.ItemsSource as System.Collections.IList); if (source == null) return ""; var headers = new List<string>(); grid.Columns.ForEach(col => { if (col is DataGridBoundColumn) { string strHeader = ConvertDic(col.Header.ToString()); headers.Add(FormatCsvField(strHeader)); } }); 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) { try { if (col is DataGridBoundColumn) { binding = (col as DataGridBoundColumn).Binding; string colPath = binding.Path.Path; string[] arr = colPath.Split('.'); string dicCategory = Convert.ToString(binding.ConverterParameter);//如有绑定字典值,则为字典类别 propInfo = data.GetType().GetProperty(colPath); object ob = data; if (arr.Length > 1) { ob = data.GetObjValue(arr[0]); propInfo = data.GetObjValue(arr[0]).GetType().GetProperty(arr[1]); } if (propInfo != null) { object obj = propInfo.GetValue(ob, null) == null ? null : propInfo.GetValue(ob, null).ToString(); obj = dicConverter.Convert(obj, null, dicCategory, null); string value = Convert.ToString(obj); csvRow.Add(FormatCsvField(value)); } } } catch { continue; } } strBuilder.Append(String.Join(",", csvRow.ToArray())).Append("\r\n"); } return strBuilder.ToString(); }