2013-06-19 4 views
0

У меня есть этот код:Неконтролируемый Флажок = текстовое поле со значением 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. Но этот код только меняет все флажки в ListView, чтобы остановить ... У вас есть идея, как его решить?

+1

'if (((CheckBox) ListView2.Items [i] .FindControl (" UcastCheckBox ")). Checked = false || a> 0)' Вы устанавливаете 'Checked = false' вместо проверки' Checked = = false' – Nolonar

ответ

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.

+0

Он работает, но когда я дайте && на месте || он не запускается:/ – Kate

+0

У вас есть ошибка? – DonBoitnott

+0

Нет, у меня нет какой-либо ошибки, только диалоговое окно не отображается ... – Kate

1

У вас было только одно = вместо == для сравнения.

if (((CheckBox)ListView2.Items[i].FindControl("UcastCheckBox")).Checked == false || a > 0) 
{ 
    RegisterStartupScript("alertBox2", "<script type='text/javascript'>alert('Error');</script>"); 
} 
+0

Да, есть ошибка в первом сообщении ... У меня есть OR, и я должен иметь AND – Kate

+1

Возможно, потому что a> 0? – gzaxx

+0

, но когда дайте && он не запускается:/ – Kate

1

Вы задаете значение true для флажков в инструкции if. Вам нужно использовать double =. Как это:

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

Он работает, но когда я даю && на месте || он не запускается:/ – Kate

+0

У вас есть сообщение об ошибке? Если нет, пожалуйста, установите контрольную точку после анализа синтаксиса и проверьте, равно ли значение a. –

+0

В качестве дополнения вам нужно изменить ToString на Text: 'int32.TryParse (((TextBox) ListView2.Items [i] .FindControl (« BrankyTextBox »)). Текст, из a);' –

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) 

Чтобы исправить условное выражение. Другое предложение здесь было бы поменять условия, извлекая выгоду из логического короткого ciruiting:

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

В этом случае, когда a > 0 является true не будут оцениваться другие условия, в результате чего (чуть-чуть!) Более высокой производительности. См. this other question для получения информации о коротком замыкании.

+0

Это работает, но когда я даю && на месте || он не запускается: / – Kate

Смежные вопросы