これは、カスタム バインド フィールドを使用して行うことができます。カスタム 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" %>
GridView 内のカスタム BoundField を参照します。
<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 関数内に直接配置するのではなく、独自の書式プロバイダーを作成することを検討することをお勧めします。
このアプローチは、うまく機能するはずです。幸運を祈ります。