我有这段代码:
for (int i = 0; i < ListView2.Items.Count; i++)
{
int a;
Int32.TryParse(((TextBox)ListView2.Items[i].FindControl("BrankyTextBox")).ToString(), out a);
if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked=false &&
a > 0)
{
RegisterStartupScript("alertBox2", "<script type='text/javascript'>alert('Error');</script>");
}
}
我想在取消选中复选框时,textbox的值必须只为0。 但是这段代码只会将listview中的所有复选框都更改为未选中...你知道如何解决它吗?
答案 0 :(得分:3)
当你在它时,你可以稍微清理一下:
for (Int32 i = 0; i < ListView2.Items.Count; i++)
{
Int32 a;
Int32.TryParse(((TextBox)ListView2.Items[i].FindControl("BrankyTextBox")).Text, out a);
if (!((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked && a > 0)
{
RegisterStartupScript("alertBox2", "<script type='text/javascript'>alert('Error');</script>");
}
}
换句话说,使用not operator
(!
)来表示反向测试。 myVariable == false
相当于简单地写!myVariable
。
答案 1 :(得分:1)
您只有一个=
而不是==
进行比较。
if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked == false || a > 0)
{
RegisterStartupScript("alertBox2", "<script type='text/javascript'>alert('Error');</script>");
}
答案 2 :(得分:1)
为if语句中的复选框指定值true。你需要使用double =。像这样:
if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked==false ||
a > 0)
答案 3 :(得分:1)
您的if
未达到预期效果
if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked=false
|| a > 0)
您正在为false
属性分配Checked
,此语句始终为false
。
目前,您的if
可以重写为
if (false || a > 0)
这显然不是你想要的。添加=
标志,将其设为
if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked == false
|| a > 0)
修复条件表达式。这里的另一个建议是交换条件,从逻辑短路中受益:
if (a > 0 || ((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked == false)
在这种情况下,当a > 0
为true
时,其他条件将不会被评估,从而导致(略微!)更好的性能。有关短路的详细信息,请参阅this other question。