dataformatstring для преобразования научного в число
Я пытаюсь связать поле данных, которое является строковым типом данных (varchar в SQL Server), и я экспортирую в Excel, что приводит к дополнительному пространству в конце.
Кто-нибудь может попросить меня решить проблему?
Я пытался отформатировать строку как
a.DataFormatString = "{0} "
Отображается как число, но в конце добавляется дополнительное пустое пространство, как обрезать пустое пространство?
Пример: он должен отображаться как "123456789000", но выход в ячейке экспорта равен "123456789000 " {дополнительное пространство в конце}
1 ответ
Это проблема форматирования Excel. Чтобы обойти это, вам нужно указать формат столбца Excel в таблице HTML. Это делается путем добавления 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"] = @"\@";
}
}
}
}
}
Вот пример вывода HTML, открытого в Excel:
<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>