DevExpress.XtraGrid 导出文本的bug

 

作者:不详 出处:Byeah's Blog  2011/4/8 15:47:38 阅读 434  次

  DevExpress.XtraGrid.GridControl有多个ExportToXXX的方法,提供多种格式的导出,极大节省了人力。如果 数据集里面有bool的数据,Grid就会显示成checkbox的形式,导出成pdf、excel当然是没有问题。但导出txt和csv格式时,对应 bool字段的值就会空白,没有任何数据导出。这个bug可以在XtraGrid的demo里面看到。导出数据空白的问题在官方资料中目前没有找到资料, 只好自己做了。

  Skelta BPM.NET(全球第一.NET工作流引擎)   Visual WebGui (完美的用户界面解决方案)
  List & Label(图表报表生成控件)   DXperience Uni Premium 白金版(慧都独家)

   以下是导出txt的代码,csv也是稍加修改即可实现。

private void ExportGridToTxt(GridView view, string path, char spliter)
         {
             if (view != null)
             {
                 StreamWriter sw = null;
                 try
                 {
                     sw = new StreamWriter(path, false, Encoding.Default);
                     StringBuilder sb = new StringBuilder();

                     for (int i = 0; i < view.Columns.Count; i++)
                     {
                         sb.Append(view.Columns[i].Caption + spliter);
                     }
                     sb.AppendLine();

                     for (int i = 0; i < view.RowCount; i++)
                     {
                         DataRow dr = view.GetDataRow(i);
                         for (int j = 0; j < view.Columns.Count; j++)
                         {
                             GridColumn col = view.Columns[j];
                             if (col.ColumnType == typeof(bool))
                             {
                                 bool val = (bool)(view.GetRowCellValue(i, col));
                                 sb.Append((bool)val ? "Y" : "N");
                             }
                             else
                             {
                                 string displayText = view.GetRowCellDisplayText(i, col);
                                 sb.Append(displayText);
                             }

                             if (j != view.Columns.Count - 1)
                             {
                                 sb.Append(spliter);
                             }
                             else
                             {
                                 sb.AppendLine();
                             }
                         }
                     }

                     sw.Write(sb.ToString());
                     sw.Flush();
                 }
                 finally
                 {
                     if (sw != null)
                     {
                         sw.Close();
                     }
                 }
             }
            
         }

posted @ 2011-10-14 14:34  gaoxuzhao  阅读(347)  评论(0)    收藏  举报