Domanda

Ho un Gridview ASP.NET con un BoundField associato a un valore decimale.Utilizzo il seguente codice per formattare il numero decimale in un valore di valuta:

DataFormatString="{0:C}"

Abbiamo però un'implementazione personalizzata di NumberFormatInfo, che rimuove il simbolo della valuta e modifica il separatore delle migliaia.Normalmente questo formato viene applicato come tale:

myDecimal.ToString("C", myCustomNFI);

Come posso specificare un NumberFormatInfo personalizzato sull'elemento BoundField di Gridview?

Grazie

È stato utile?

Soluzione

Questa operazione può essere eseguita utilizzando un campo associato personalizzato.Inizia con una classe BoundField personalizzata.Di seguito ho tentato di seguire la tua convenzione di denominazione.

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);
        }
    }
}

Registra il controllo nel tuo file .ASPX:

<%@ Register Namespace="CustomBoundField" TagPrefix="custom" %>

Fai riferimento al BoundField personalizzato all'interno del tuo GridView:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false">
    <Columns>
        <custom:NFIBoundField  DataField="Price" HeaderText="Price" DataFormatString="{0:NFI}"/>
    </Columns>
</asp:GridView>

Ti consigliamo di giocare all'interno di FormatDataValue() per ottenere la formattazione che desideri.

Un paio di commenti:

  • Se desideri che il tuo limite personalizzato gestisca più formati, analizza la base.DataFormatString per ottenere il tipo di formattazione.In altre parole, fornendo {0: nfi} o {0: nfi2} nel codice-fronto potrebbe comportare formati diversi se si accede per questo all'interno di FormatDataValue.

  • Potresti prendere in considerazione la creazione del proprio fornitore di formato piuttosto che posizionare tutta la logica di formattazione direttamente all'interno della funzione FormatDatavalue.

Questo approccio dovrebbe funzionare bene per te.Buona fortuna.

Altri suggerimenti

Prova con field.DataFormatString = currencySymbol + "{0:. #, ### ##}";

Funziona bene per me.

Io non sono sicuro al 100%, ma non credo che si può.

È necessario utilizzare un campo modello e legarsi a una letterale su RowDataBound invece di utilizzare il formattazione personalizzata. Felice di essere smentito però ....

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top