Formatação de Valor

12/05/2008

0

Estou usando o controle MaskedEditExtender para formatar alguns campos da minha aplicação só que estou tendo dificuldade para configurar a [b:13532d7dcb]entrada de valor ´moeda´ da direita para esquerda. mantendo as duas ultimas posições como decimais[/b:13532d7dcb]. Para quem conhece estou tentando fazer o mesmo tipo de [b:13532d7dcb]entrada de valor que o Banco do Brasil usa[/b:13532d7dcb].
Alguém sabe como fazer isso com o Extender ou tem algum JavaScript que faça isso? Ou até qualquer outra solução que eu não tenha tentado ?!?

:?:


Hal9000

Hal9000

Responder

Posts

12/05/2008

Chanteelee

Seguinte, pra usar a mascara tu faz assim:
Um exemplo q eu fiz dia desses:

<asp:TextBox ID=´VL_INITIAL_p´ runat=´server´></asp:TextBox>

Essa é a input.
E agora vc coloca o MaskedEditExtender em algum lugar da pagina:
<cc1:MaskedEditExtender ID=´Mask_Initial´ runat=´server´ TargetControlID=´VL_INITIAL_p´ Mask=´9,999,999.99´ MaskType=´Number´ InputDirection=´RightToLeft´>
</cc1:MaskedEditExtender>

Entendendo o componente aê:

TargetControlID indica qual INPUT esse extender vai controlar
Mask vc indica como é a mascara... No caso ele ta regulado pra exibir 2 casas decimais ( por causa do . )
MaskType vc indica qual tipo de mascara. Ele funciona pra Data e outras coisas tb...
InputDirection é a direção =D

Mais informações sobre esse e outros componentes do Ajax:
http://www.asp.net/AJAX/AjaxControlToolkit/Samples/MaskedEdit/MaskedEdit.aspx

;)


Responder

13/05/2008

Hal9000

ohh Chanteelee!

Fiz como você falou, olha só:

<asp:TextBox ID=´txtValMoeda´ runat=´server´></asp:TextBox>
<cc1:MaskedEditExtender ID=´MaskedEditExtender1´ runat=´server´
InputDirection=´RightToLeft´ Mask=´999999999,99´
TargetControlID=´txtValMoeda´ AutoComplete=´False´ ClearMaskOnLostFocus=´False´
CultureName=´pt-BR´ MaskType=´Number´ PromptCharacter=´ ´>
</cc1:MaskedEditExtender>

Mas as mascara só funciona assim: ´999999999,99´. se eu colocar ´9.999.999,99´ ou ´9,999,999.99´ A digitação só funciona pela esquerda
Outro problema que percebi quando chego no meu textbox pelo Tab a Mascara fica toda focada e ai digitação só pela Esquerda tb.

Se cliclo no textbox para apagar o foco a digitação vai bem (desde que a mascara seja ´9999999,99´ . Mas Se preciso pagar um valor com back space (por exemplo) ele deveria apagar o meu ultimo caracter da direta para esquerda certo? É mas não faz isso ele apaga o primeiro da esquerda para direita. Enfim... Pau total.

Será que tem algo mais que eu tenha que configurar? Habilitei até o Globalization no Script manager e Nada.

Alguem consegui fazer isso? Com Extender ou com Java Script? Eu to atras de um código javaScript que faça isso mas não achei nada ainda!

:(


Responder

13/05/2008

Ricardo Silva

Se vc quiser usar javaScript é soh fazer a duas funçoes:



// Formata Float centavos com ´,´ milhar com ´.´
function Limpar(valor, validos) {// retira caracteres invalidos da string
            var result = "";
            var aux;
            for (var i=0; i < valor.length; i++) {
                aux = validos.indexOf(valor.substring(i, i+1));
                if (aux>=0) {
                    result += aux;
                }
            }
            return result;
        }

//Formata número tipo moeda usando o evento onKeyDown
function Formata(campo,tammax,teclapres,decimal) {
            var tecla = teclapres.keyCode;
            vr = Limpar(campo.value,"0123456789");
            tam = vr.length;
            dec=decimal

            if (tam < tammax && tecla != 8){
                tam = vr.length + 1 ; 
            }
            if (tecla == 8 ){
                tam = tam - 1 ;
            }
            if ( tecla == 8 || tecla >= 48 && tecla <= 57 || tecla >= 96 && tecla <= 105 ){
                if ( tam <= dec ){
                    campo.value = vr ;
                }
                if ( (tam > dec) && (tam <= 5) ){
                    campo.value = vr.substr( 0, tam - 2 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 6) && (tam <= 8) ){
                    campo.value = vr.substr( 0, tam - 5 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ; 
                }
                if ( (tam >= 9) && (tam <= 11) ){
                    campo.value = vr.substr( 0, tam - 8 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 12) && (tam <= 14) ){
                    campo.value = vr.substr( 0, tam - 11 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - dec, tam ) ;
                }
                if ( (tam >= 15) && (tam <= 17) ){
                    campo.value = vr.substr( 0, tam - 14 ) + "." + vr.substr( tam - 14, 3 ) + "." + vr.substr( tam - 11, 3 ) + "." + vr.substr( tam - 8, 3 ) + "." + vr.substr( tam - 5, 3 ) + "," + vr.substr( tam - 2, tam ) ;
                }
            }
        }

pa chamar esta função é simples C#:
 txtValor.Attribute.Add("onKeyDown", "this, 10, this.event, 2");



Responder

14/05/2008

Chanteelee

Rapaz...
Tenta direitinho, por que a parada funciona sim...

Tenta mudar as propriedades até encontrar o q tu quer


Responder

Que tal ter acesso a um e-book gratuito que vai te ajudar muito nesse momento decisivo?

Ver ebook

Recomendado pra quem ainda não iniciou o estudos.

Eu quero
Ver ebook

Recomendado para quem está passando por dificuldades nessa etapa inicial

Eu quero

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar