Pergunta

Eu tenho um GridView ASP.NET com um BoundField que está vinculado a um valor decimal. Eu uso o seguinte código para formatar o número decimal para um valor de moeda:

DataFormatString="{0:C}"

Temos uma implementação personalizada do NumberFormatInfo porém, que remove o símbolo da moeda e modifica a milhares seperator. Normalmente, este formato é aplicado como tal:

myDecimal.ToString("C", myCustomNFI);

Como posso especificar um costume NumberFormatInfo no elemento BoundField do Gridview?

Graças

Foi útil?

Solução

Isto pode ser feito usando um campo ligados personalizado. Comece com um costume classe BoundField. Abaixo eu tentou seguir sua convenção de nomenclatura.

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 o controle em seu arquivo ASPX:

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

Referência BoundField personalizado dentro do seu GridView:

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

Você vai querer brincar dentro de FormatDataValue () a fim de obter a formatação desejada.

Um par de comentários:

  • Se você quiser que o seu costume BoundField para lidar com vários formatos, parse base.DataFormatString para obter o formatação tipo. Em outras palavras, fornecendo {0: NFI} ou {0: NFI2} no code-frente pode resultar em diferentes formatos se acomodar para isso dentro FormatDataValue.

  • Você pode querer considerar a criação de o seu próprio provedor de formato em vez de colocando toda a sua lógica formatação dentro direita do FormatDataValue função.

Esta abordagem deve trabalhar para você muito bem. Melhor da sorte.

Outras dicas

Tente com field.DataFormatString = currencySymbol + "{0:. #, ### ##}";

Ele funciona muito bem para mim.

Eu não estou 100% certo, mas eu não acho que você pode.

Você vai precisar usar um campo de modelo e se ligam a um literal em RowDataBound em vez de usar o formatador personalizado. Feliz por estar errado no entanto ....

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top