我正在尝试绑定一个数据字段,这是一个字符串数据类型(SQL Server中的varchar) 我正在导出到Excel中,最终导致额外的空间。
有人可以建议我解决这个问题吗?
我尝试将字符串格式化为
a.DataFormatString = "{0} "
它显示为数字,但在末尾添加了额外的空白区域,如何修剪空白区域?
例如:它应显示为“ 123456789000 ”,但导出单元格中的输出为“ 123456789000 ”{最后的额外空格}
答案 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>