Pregunta

Tengo un GridView ASP.NET con un BoundField que está enlazado a un valor decimal. Yo uso el siguiente código para formatear el número decimal a un valor de moneda:

DataFormatString="{0:C}"

Tenemos una implementación personalizada de NumberFormatInfo sin embargo, que elimina el símbolo de moneda y modifica el separador de miles. Normalmente, este formato se aplica como tal:

myDecimal.ToString("C", myCustomNFI);

¿Cómo se especifica un NumberFormatInfo personalizado en el elemento BoundField del Gridview?

Gracias

¿Fue útil?

Solución

Esto se puede hacer usando un campo enlazado personalizado. Comenzar con una clase BoundField personalizado. A continuación he tratado de seguir su convención de nombres.

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

Registrar el control en su archivo .aspx:

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

Haga referencia a la costumbre BoundField dentro de su GridView:

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

Usted va a querer jugar en el interior de FormatDataValue () con el fin de obtener el formato que desee.

Un par de comentarios:

  • Si usted quiere que su costumbre de BoundField manejar múltiples formatos, analizar base.DataFormatString para obtener el tipo de formato. En otras palabras, proporcionando {0: NFI} o {0: NFI2} en el código adelantado podría dar lugar a diferentes formatos si cabida a esto dentro de FormatDataValue.

  • Es posible que desee considerar la creación su propio proveedor de formato en lugar de la colocación de toda la lógica de formateo justo dentro de la FormatDataValue función.

Este enfoque debería funcionar para usted muy bien. Mejor de las suertes.

Otros consejos

Trate con field.DataFormatString = CURRENCYSYMBOL + "{0:. #, ### ##}";

Funciona bien para mí.

No estoy 100% seguro, pero no creo que pueda.

Usted tendrá que utilizar un campo de la plantilla y se unen a un literal en lugar de utilizar su RowDataBound formateador personalizado. Feliz de estar equivocado sin embargo ....

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top