dataformatstring用于将scientific转换为number

时间:2014-01-22 04:17:59

标签: c# boundfield

我正在尝试绑定一个数据字段,这是一个字符串数据类型(SQL Server中的varchar) 我正在导出到Excel中,最终导致额外的空间。

有人可以建议我解决这个问题吗?

我尝试将字符串格式化为

a.DataFormatString = "{0} " 

它显示为数字,但在末尾添加了额外的空白区域,如何修剪空白区域?

例如:它应显示为“ 123456789000 ”,但导出单元格中的输出为“ 123456789000 ”{最后的额外空格}

1 个答案:

答案 0 :(得分:0)

这是一个Excel格式问题。要解决此问题,您需要在HTML表上指定Excel列格式。这是通过将style="mso-number-format:\@;"添加到<td>标记来完成的。默认情况下,System.Web.UI.WebControls.DataGrid不会呈现自定义样式,因此您需要一个从DataGrid派生的新控件类,如下所示:

using System;
using System.Web.UI.WebControls;

public class MyDataGrid : DataGrid
{
    protected override void OnItemDataBound(DataGridItemEventArgs e)
    {
        base.OnItemDataBound(e);

        if (e.Item.ItemType != ListItemType.Item && e.Item.ItemType != ListItemType.AlternatingItem) return;

        var dt = DataSource as DataTable;

        if (dt != null)
        {       
            for (int i=0; i < dt.Columns.Count; i++)
            {
                if (dt.Columns[i].DataType == typeof(string))
                {
                    e.Item.Cells[i].Style["mso-number-format"] = @"\@";
                }
            }
        }
    }
}

以下是在Excel中打开的示例HTML输出:

<table cellspacing="0" rules="all" border="1" style="border-collapse:collapse;">
  <tr>
    <td>Field1</td><td>Field2</td>
  </tr><tr>
    <td style="mso-number-format:\@;">1321365465465</td><td>123</td>
  </tr><tr>
    <td style="mso-number-format:\@;">1321365465465</td><td>123</td>
  </tr>
</table>

enter image description here


参考文献: