
做一个基于Silverlight的应用,主要是报表数据生成展示,还需要将报表数据导出,在网上找了一些资料,发现不能用,于是进行了改进,并加入了读取所有分页数据的功能。
以下为基础代码:
/// <summary> /// CSV字符串转换 /// </summary> /// <param name="data"></param> /// <returns></returns> private string FormatCSVFIEld(string data) { return String.Format("{0}\t",data.Replace("\"","\t\n")); } /// <summary> /// 导出到Excel /// </summary> /// <param name="dataPagerTemp">分页控件</param> /// <param name="dataGrIDTemp">数据表格控件</param> /// <returns></returns> private string ExportExcel(DataPager dataPagerTemp,DataGrID dataGrIDTemp) { string colPath; System.Reflection.PropertyInfo propInfo; System.windows.Data.Binding binding; System.Text.StringBuilder strBuilder = new System.Text.StringBuilder(); //加载Excel表头数据 List<string> headers = new List<string>(); for (int i = 0; i < dataGrIDTemp.Columns.Count; ++i) { string strTemp = dataGrIDTemp.Columns[i].header.ToString(); headers.Add(FormatCSVFIEld(strTemp)); } strBuilder .Append(String.Join("",headers.ToArray())) .Append("\t\n"); //内容 for (int i = 0; i < dataPagerTemp.PageCount; i++) { dataPagerTemp.PageIndex = i; foreach (Object m_Temp in dataGrIDTemp.ItemsSource) { List<string> csvRow = new List<string>(); foreach (DataGrIDColumn col in dataGrIDTemp.Columns) { if (col is DataGrIDBoundColumn) { binding = (col as DataGrIDBoundColumn).Binding; colPath = binding.Path.Path; string[] pathList = colPath.Split('.'); object currentData = m_Temp; int count = 0; foreach (string item in pathList) { propInfo = currentData.GetType().GetProperty(item); if (propInfo == null) break; count++; if (count == pathList.Length) { csvRow.Add(FormatCSVFIEld(propInfo.GetValue(currentData,null).ToString())); break; } else { currentData = propInfo.GetValue(currentData,null); } } } } strBuilder .Append(String.Join("",csvRow.ToArray())) .Append("\t\n"); } } dataPagerTemp.PageIndex = 0; return strBuilder.ToString(); } /// <summary> /// 保存为Excel /// </summary> /// <param name="dataPagerTemp">分页控件</param> /// <param name="dataGrIDTemp">数据表格控件</param> private voID SaveAsExcel(DataPager dataPagerTemp,DataGrID dataGrIDTemp) { string data = ExportExcel(dataPagerTemp,dataGrIDTemp); SavefileDialog sfd = new SavefileDialog() { DefaultExt = "xls",Filter = "Microsoft Office Excel(*.xls)|*.xls",FilterIndex = 1 }; if (sfd.ShowDialog() == true) { using (Stream stream = sfd.Openfile()) { using (StreamWriter writer = new StreamWriter(stream,System.Text.UnicodeEnCoding.Unicode)) { data = data.Replace(",","/t"); writer.Write(data); writer.Close(); } stream.Close(); } } }
调用:
/// <summary> /// 导出报表 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private voID buttonExport_Click(object sender,RoutedEventArgs e) { SaveAsExcel(dataPagerReport,dataGrIDReport); } 总结 以上是内存溢出为你收集整理的Silverlight 中将DataGrid中所有分页导出到Excel全部内容,希望文章能够帮你解决Silverlight 中将DataGrid中所有分页导出到Excel所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)