Benutzerdefinierte Number auf Dataformatstring
-
12-09-2019 - |
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
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 ....