Dev GridControl數據導出格式問題


環境:DevExpress9.3,Vs2008

DevExpress的GridControl提供方便的數據導出到Excel功能,導出中用戶可以根據GridControl的格式進行導出(ExportToXls(Stream stream)方法)。

1、如果表中存在一列為字符類型,但是存放的為數字,那么按照GridControl的格式導出到Excel中便會產生"將存儲為文本的數字轉換為數字"的問題提示,必須在Excel中把這些值轉化為數字,才可進行計算等。

對於這種方式的處理方法很簡單,只要把GridControl綁定的數據源的這一列的數據類型修改為數值類型即可。

image

2、我手動對存儲的數字進行了處理,對整數采用千分位顯示(intValue.ToString("###,###")方法),對小數采用千分位兩位小數顯示,不足兩位小數的用0補足(String.Format("{0:N}", doubleValue)方法或者String.Format("{0:N2}",doubleValue)方法)。這種方式已經將存儲的數字轉化為字符串了,如果該列數值類型,則會導致賦值錯誤,因此列只可以是字符類型,同樣導致按照GridControl的格式導出到Excel中便會產生"將存儲為文本的數字轉換為數字"的問題。

對於這中方法,我們可以通過GridControl自帶的數據格式進行解決。下面可以通過兩種方法進行實現。

(1)通過代碼進行實現

對於整數:

      gridViewTest.Columns[i].DisplayFormat.FormatType = FormatType.Numeric;
            gridViewTest.Columns[i].DisplayFormat.FormatString = "#,###";

對於小數:

      gridViewTest.Columns[i].DisplayFormat.FormatType = FormatType.Numeric;
            gridViewTest.Columns[i].DisplayFormat.FormatString = "#,###.00";

(1)通過設計窗體進行實現

對於整數:

image

對於小數:

image

下面附導出到Excel的代碼實現:

   1: private void btnExport_Click(object sender, EventArgs e)
   2: {
   3:     saveFileDialog1.FileName = "";
   4:     saveFileDialog1.Filter = "Excel文件(.xls)|*.xls";
   5:     saveFileDialog1.FileName = "測試文檔";
   6:     saveFileDialog1.OverwritePrompt = false; //已存在文件是否覆蓋提示
   7:     if (saveFileDialog1.ShowDialog() != DialogResult.OK)
   8:         return;
   9:     //已存在文件是否覆蓋提示
  10:     while (System.IO.File.Exists(saveFileDialog1.FileName) && 
  11:         DevExpress.XtraEditors.XtraMessageBox.Show("該文件名已存在,是否覆蓋?", 
  12:         "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Question) != DialogResult.Yes)
  13:     {
  14:         if (saveFileDialog1.ShowDialog() != DialogResult.OK)
  15:             return;
  16:     }
  17:     if (saveFileDialog1.FileName != "")
  18:     {
  19:         try
  20:         {
  21:             System.IO.FileStream fs =
  22:                (System.IO.FileStream)saveFileDialog1.OpenFile();
  23:             this.gridControlTest.ExportToXls(fs);
  24:             fs.Close();
  25:             DevExpress.XtraEditors.XtraMessageBox.Show("數據導出成功!", "提示");
  26:         }
  27:         catch (Exception ex)
  28:         {
  29:             if (ex.Message.Contains("正由另一進程使用"))
  30:             {
  31:                 DevExpress.XtraEditors.XtraMessageBox.Show("數據導出失敗!文件正由另一個程序占用!", "提示");
  32:             }
  33:             else
  34:                 DevExpress.XtraEditors.XtraMessageBox.Show("數據導出失敗!數據量過大,請分別統計再導出!", "提示");
  35:         }
  36:     }
  37: }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM