0

我有这个代码:

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>");
    }
}

我想当未选中复选框时,文本框的值必须仅为 0。但是此代码仅将列表视图中的所有复选框更改为未选中...您知道如何解决吗?

4

4 回答 4

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

于 2013-06-19T11:12:06.973 回答
1

您只有一个=,而不是==用于比较。

if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked == false || a > 0)
{
    RegisterStartupScript("alertBox2", "<script type='text/javascript'>alert('Error');</script>");
}
于 2013-06-19T11:08:45.467 回答
1

您为 if 语句中的复选框分配 true 值。您需要使用双 =。像这样:

if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked==false ||
     a > 0)
于 2013-06-19T11:08:48.850 回答
1

if没有做你所期望的

    if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked=false 
       || a > 0)

您正在分配falseChecked属性,并且此语句始终为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 。

于 2013-06-19T11:19:50.223 回答