Это можно сделать с помощью настраиваемого связанного поля. Начните с пользовательского класса BoundField. Ниже я попытался следовать вашему соглашению об именах.
namespace CustomBoundField
{
public class NFIBoundField : System.Web.UI.WebControls.BoundField
{
protected override string FormatDataValue(object dataValue, bool encode)
{
if (dataValue == null || dataValue == System.DBNull.Value)
return "";
if (base.DataFormatString == string.Empty)
return dataValue.ToString();
// Format as you wish based on dataValue and DataFormatString argument
return string.Format("{0}", dataValue);
}
}
}
Зарегистрируйте элемент управления в вашем файле .ASPX:
<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>
Ссылка на пользовательский BoundField внутри вашего GridView:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<custom:NFIBoundField DataField="Price" HeaderText="Price" DataFormatString="{0:NFI}"/>
</Columns>
</asp:GridView>
Вы захотите поиграться внутри FormatDataValue (), чтобы получить желаемое форматирование.
Пара комментариев:
Если вы хотите, чтобы ваш пользовательский BoundField
обрабатывать несколько форматов, разбирать
base.DataFormatString, чтобы получить
тип форматирования. Другими словами,
предоставление {0: NFI} или {0: NFI2} в
код фронта может привести к другому
форматы, если вы учитываете это в FormatDataValue.
Вы можете рассмотреть возможность создания
ваш собственный поставщик форматов, а не
размещение всей вашей логики форматирования
прямо внутри FormatDataValue
функция.
Этот подход должен работать для вас просто отлично. Желаем удачи.