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>


Рекомендации:

Другие вопросы по тегам