Frage

Ich habe eine ASP.NET Gridview mit einem Boundfield, der mit einem Dezimalwert gebunden ist. Ich verwende den folgenden Code, um die Dezimalzahl in einen Währungswert formatiert werden:

DataFormatString="{0:C}"

Wir haben eine benutzerdefinierte Implementierung von Number obwohl, die das Währungssymbol entfernt und ändert die Tausende seperator. Normalerweise wird dieses Format als solche angewendet:

myDecimal.ToString("C", myCustomNFI);

Wie lege ich einen benutzerdefinierten Number auf dem Boundfield-Elemente des Gridview?

Danke

War es hilfreich?

Lösung

Dies kann mit einem benutzerdefinierten gebunden Feld erfolgen. Beginnen Sie mit einer benutzerdefinierten Boundfield-Klasse. Unten habe ich versucht, Ihre Namenskonvention zu folgen.

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

Registrieren Sie die Steuerung in Ihrer ASPX-Datei:

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

Das Bezugs die benutzerdefinierte Boundfield in Ihrem Gridview:

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

Sie werden um, um innerhalb von FormatDataValue () spielen wollen, die Formatierung, die Sie erhalten möchten.

Ein paar Anmerkungen:

  • Wenn Sie Ihre individuelle Boundfield an mehrere Formate verarbeiten, analysieren base.DataFormatString die bekommen Formatierungstyp. Mit anderen Worten, Bereitstellen {0: NFI} oder {0: LFI2} in der Code-Front konnte in verschiedenen führen Formate, wenn Sie für diese innerhalb FormatDataValue aufzunehmen.

  • Sie könnten in Betracht ziehen zu schaffen Ihr eigenes Format Anbieter statt Platzieren Sie alle Ihre Formatierungslogik direkt in der FormatDataValue Funktion.

Dieser Ansatz sollte für Sie arbeiten gut. Viel Glück.

Andere Tipps

Versuchen Sie es mit field.DataFormatString = currency + "{0:. # ### ##}";

Es funktioniert gut für mich.

Ich bin nicht 100% sicher, aber ich glaube nicht, Sie können.

Sie müssen ein Template-Feld verwenden und binden an eine wörtliche auf RowDataBound statt Ihrer benutzerdefinierten Formatierer verwenden. Glücklich aber erwies sich als falsch werden ....

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top