未选中复选框=文本框,值为0

时间:2013-06-19 11:06:51

标签: c# listview checkbox

我有这段代码:

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中的所有复选框都更改为未选中...你知道如何解决它吗?

4 个答案:

答案 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 > 0true时,其他条件将不会被评估,从而导致(略微!)更好的性能。有关短路的详细信息,请参阅this other question