Cela peut être fait en utilisant un champ lié personnalisé. Commencez avec une classe BoundField personnalisée. Ci-dessous j'ai essayé de suivre votre convention de nommage.
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);
}
}
}
Enregistrez le contrôle dans votre fichier .ASPX:
<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>
Référence la coutume BoundField dans votre GridView:
<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
<Columns>
<custom:NFIBoundField DataField="Price" HeaderText="Price" DataFormatString="{0:NFI}"/>
</Columns>
</asp:GridView>
Vous voulez jouer à l'intérieur de FormatDataValue() dans afin d'obtenir le format que vous voulez.
Quelques commentaires:
Si vous voulez que votre BoundField personnalisé pour gérer plusieurs formats, analyser base.DataFormatString pour obtenir le type de formatage . En d'autres termes, en fournissant {0: NFI} ou {0: NFI2} dans le front de code peut aboutir à différents formats si vous acceptez cela dans FormatDataValue.
Vous voudrez peut-être envisager de créer votre propre fournisseur de format plutôt que placer l'ensemble du formatage logique à l'intérieur de la fonction FormatDataValue .
Cette approche devrait fonctionner pour vous. Bonne chance.
Solution très élégante, merci Ben. – staterium
Vous êtes les bienvenus. Je suis heureux d'aider. –