0

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

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

我试图将字符串格式化为

a.DataFormatString = "{0} " 

它显示为数字但最后添加了额外的空格,如何修剪空格?

例如:它应该显示为“ 123456789000 ”,但导出单元格中的输出是“ 123456789000 ”{末尾有多余的空格}

4

1 回答 1

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>

在此处输入图像描述


参考:

于 2014-01-22T04:24:56.263 回答