C# 小于 100 的数字字段总和(静态和动态)
C# Sum of numberfields (Static and dynamic) less than 100
我有 3 个静态 numberfields
,我正在 CodeBehind
中再创建一些 numberfields
。我想要的是将所有 numberfields
的值的 sum
限制为 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
字段在 blur
事件上创建一个 listener
:
nf.Listeners.Blur.Handler = "#{sum100}.setValue(Number(this.getValue()) + Number(#{sum100}.getValue()));";
然后在按钮 click
的 Before
事件上,我添加了以下代码:
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
中触发
您可以将其放在 "Before" 上,然后点击:
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;
}
我有 3 个静态 numberfields
,我正在 CodeBehind
中再创建一些 numberfields
。我想要的是将所有 numberfields
的值的 sum
限制为 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
字段在 blur
事件上创建一个 listener
:
nf.Listeners.Blur.Handler = "#{sum100}.setValue(Number(this.getValue()) + Number(#{sum100}.getValue()));";
然后在按钮 click
的 Before
事件上,我添加了以下代码:
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
您可以将其放在 "Before" 上,然后点击:
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;
}