Question

I ai un ASP.NET Gridview avec un BoundField qui est lié à une valeur décimale. J'utilise le code suivant pour formater le nombre décimal à une valeur monétaire:

DataFormatString="{0:C}"

Nous avons une implémentation personnalisée de NumberFormatInfo bien, ce qui supprime le symbole monétaire et modifie les milliers seperator. Normalement, ce format est appliqué en tant que tel:

myDecimal.ToString("C", myCustomNFI);

Comment puis-je spécifier un NumberFormatInfo personnalisé sur l'élément BoundField du Gridview?

Merci

Était-ce utile?

La solution

Cela peut être fait en utilisant un champ lié personnalisé. Commencez par une classe BoundField personnalisée. Ci-dessous je tentais 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 () afin d'obtenir la mise en forme que vous voulez.

Quelques commentaires:

  • Si vous voulez que votre BoundField personnalisé à gérer plusieurs formats, analyser base.DataFormatString pour obtenir le le type de mise en forme. En d'autres termes, fournir {0: NFI} ou {0: IFN2} dans le code avant pourrait entraîner différents formats si vous accueillerons pour cela dans FormatDataValue.

  • Vous voudrez peut-être envisager de créer votre propre fournisseur de format plutôt que placer l'ensemble de votre logique de formatage à l'intérieur de la FormatDataValue fonction.

Cette approche devrait travailler pour vous bien. Bonne chance.

Autres conseils

Essayez avec field.DataFormatString = currencySymbol + "{0:. #, ### ##}";

Il fonctionne très bien pour moi.

Je ne suis pas sûr à 100% mais je ne pense pas que vous pouvez.

Vous aurez besoin d'utiliser un champ de modèle et de se lier à un littéral RowDataBound au lieu d'utiliser votre formatter personnalisé. Heureux d'être mal mais .... prouvé

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top