C # Сумма числовых полей (статических и динамических) менее 100 - PullRequest
0 голосов
/ 23 мая 2018

У меня есть 3 статических numberfields, и я создаю еще numberfields в CodeBehind.Я хочу ограничить sum значений всех numberfields до 100.

Вот статические numberfields:

<ext:NumberField ID="numS1" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS1" />                                                
<ext:NumberField ID="numS2" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS2" />                                          
<ext:NumberField ID="numS3" runat="server" MinValue="0" MaxValue="100" FieldLabel="numS3" />

А вот динамические numberfields создано в коде:

foreach (var v in visits)
{
    NumberField nf = new NumberField();
    nf.ID = v.VISID + "num";
    nf.MaxValue = 100;
    nf.MinValue = 0;
    nf.FieldLabel = v.VISID;
    PerVisitFS.Items.Add(nf);
    nf.Render();
} 

Я попытался использовать hidden поле #{sum100}, а для полей dynamic создать событие listener on blur:

nf.Listeners.Blur.Handler = "#{sum100}.setValue(Number(this.getValue()) + Number(#{sum100}.getValue()));";

И на Before событии click кнопки я добавил этот код:

Before="#{sum100}.setValue(Number(#{sum100}.getValue()) + Number(#{numS1}.getValue()) + Number(#{numS2}.getValue()) + Number(#{nums#}.getValue())); 
if ( #{sum100}.getValue() > 100)
{ alert('sum is > 100 : ' + #{sum100}.getValue()); 
     #{sum100}.setValue(0); 
     return false;
}
else
{alert('sum is : ' + #{sum100}.getValue())}">

Но проблема с этим подходом заключается в том, что при вводенекоторые значения в первый раз работают, но если я попытаюсь обновить поле dynamic, тогда будет вычислена сумма только с обновленными numberfield и static без других dynamic.

Это происходит потому, что событие blur не вызывается в неизмененном dynamic numberfields

1 Ответ

0 голосов
/ 23 мая 2018

Вы можете просто поставить это на кнопку «До» и сделать это:

            var numOfNumFields = 3; //increase as necessary, it could came from a hidden field 

            var sum = 0;
            for ( var i = 0; i< numOfNumFields;i++){

               sum += Ext.getCmp('numS'+i).getValue();
            }
            if (sum > 100)
            { 
                alert('sum is > 100 : ' + sum); 
                return false
            }
            else
            {
                alert('sum is : ' + sum);
                return true;
            }
...