Money textbox with embeded javascript

Description

MoneyTextBox convertit "100000.123" en "100 000.12"

ce composant derive d'une textbox, j'y ai ajouté la propriété value, qui lorsqu'on lui affecte une valeur,
modifie le style d'affichage

ajout de cette fonctionnalité en javascript lorsqu'un utilisateur saisie une valeur, à la fin de la saisie, la valeur est reformaté

Source / Exemple :


namespace WebControlLibrary1
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Text;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Globalization;

    [DefaultProperty("Text")]
    [ToolboxData("<{0}:MoneyTextBox runat=server>")]
    public class MoneyTextBox : TextBox
    {
        //ajouter cette ligne dans assembly info pour que le js soit inclu
        //[assembly: System.Web.UI.WebResource("WebControlLibrary1.Javascripts.Money.js", "text/js", PerformSubstitution = true)]

        /// <summary>
        /// Gets or sets the text content of the <see cref="T:System.Web.UI.WebControls.TextBox"/> control.
        /// </summary>
        /// <value></value>
        /// <returns>The text displayed in the <see cref="T:System.Web.UI.WebControls.TextBox"/> control. The default is an empty string ("").</returns>
        [Category("Appearance")]
        [Browsable(true)]
        public override string Text
        {
            get
            {
                return base.Text; 
            }
            set 
            { 
                base.Text = value;
            }
        }

        /// <summary>
        /// _errorMessage
        /// </summary>
        private string _errorMessage;

        /// <summary>
        /// Gets or sets the error message.
        /// </summary>
        /// <value>The error message.</value>
        [Category("Appearance")]
        [Browsable(true)]
        public string ErrorMessage
        {
            get { return _errorMessage; }
            set { _errorMessage = value; }
        }

        public event EventHandler<EventArgs> ValueChanged;

        protected override void OnInit(EventArgs e)
        {
            base.OnInit(e);
            //this.PreRender += new EventHandler(MoneyTextBox_PreRender);
            this.TextChanged += new EventHandler(txtMoney_TextChanged);
        }

        protected void txtMoney_TextChanged(object sender, EventArgs e)
        {
            if (ValueChanged != null)
                ValueChanged(this, EventArgs.Empty);
        }

        /// <summary>
        /// Registers client script for generating postback events prior to rendering on the client, if <see cref="P:System.Web.UI.WebControls.TextBox.AutoPostBack"/> is true.
        /// </summary>
        /// <param name="e">An <see cref="T:System.EventArgs"/> that contains the event data.</param>
        protected override void OnPreRender(EventArgs e)
        {
            string scriptName = "MoneyConverter";

            if (!Page.ClientScript.IsClientScriptBlockRegistered(scriptName))
            {
                //Attributes.Add("onChange", string.Format("test()"));
                Attributes.Add("onChange", string.Format("RegisterEvents(this)"));
                //Attributes.Add("onKeyPress", "return afterNumericTextKeyPress(event,this)");
                this.Page.ClientScript.RegisterClientScriptInclude(
                    this.GetType(),
                    "Testpp3",
                    Page.ClientScript.GetWebResourceUrl(this.GetType(),
                    "WebControlLibrary1.Javascripts.Money.js"));
            }

            base.OnPreRender(e);
        }

        public decimal Value
        {
            get
            {
                string strValue = Text.Trim(' ', '+', ' ');
                StringBuilder builder = new StringBuilder();
                foreach (char c in strValue)
                {
                    if (c == ' ')
                        continue;
                    if (Char.IsDigit(c) || c == '.')
                    {

                        builder.Append(c);
                    }
                    else if (c == ',')
                    {
                        builder.Append('.');
                    }
                    else
                    {
                        break;
                    }
                }
                decimal value;
                if (!decimal.TryParse(builder.ToString(), NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out value))
                {
                    return 0;
                }
                return value;
            }
            set
            {
                Text = value.ToString("### ### ##0.00", CultureInfo.InvariantCulture).Replace(".", ",").Trim();
            }
        }

        public string InnerTexboxClientID
        {
            get
            {
                return this.ClientID;
            }
        }
    }
}

Codes Sources

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.