我写了嵌套的if语句。其中之一包括一个循环。在此循环之后,else语句不起作用,好像它们不存在一样。它去抓住声明。 尽管当我取消该循环时,else语句仍然起作用。
我该如何解决?
这是Visual Studio和SQL Server2005。我试图将值保存在文本框“ txtCategoryName”中。在第一个if
语句中,我检查文本框是否不为空。在第二个“ if语句”中,我检查该值在文本框中是否重复。在else
语句中,保存该值。
try
{
if (txtCategoryName.Text == string.Empty)
{
MessageBox.Show("Fill the textBox", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
else if (txtCategoryName.Text != string.Empty)
{
for (int i = 0; i <= dgvCategory.Rows.Count; i++)
{
if (dgvCategory.Rows[i].Cells[1].Value.ToString() == txtCategoryName.Text)
{
MessageBox.Show("Choose another name", "", MessageBoxButtons.OK,MessageBoxIcon.Exclamation);
return;
}
}
}
else
{
txtCategoryId.Text = clsCat.getCategoryId().Rows[0][0].ToString();
clsCat.addCategory(txtCategoryName.Text);
MessageBox.Show("Done", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtCategoryId.Clear();
txtCategoryName.Clear();
dataPreview();
}
}
catch
{
MessageBox.Show("Erroe save in category", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
如果“ txtCategoryName.Text”通过第一个“ if语句”和第二个“ if语句”执行“ else语句”中的操作,我希望将其保存在数据库中。但是在第二个“ if语句”中循环之后,它将直接转到“ catch”。
答案 0 :(得分:3)
问题出在int i = 0; i <= dgvCategory.Rows.Count; i++
中,因为您要用0初始化i并经过dgvCategory.Rows.Count
。
应该更具体地是int i = 0; i < dgvCategory.Rows.Count; i++
i < dgvCategory.Rows.Count;
而不是i <= dgvCategory.Rows.Count;
答案 1 :(得分:0)
只需添加一个isElseLoop
bool变量,该变量将在执行else loop
后更新。请参考下面的代码。
private void btnSave_Click(object sender, EventArgs e)
{
try
{
bool isElseLoop = false;
if (txtCategoryName.Text == string.Empty)
{
MessageBox.Show("Fill the textBox", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
return;
}
else if (txtCategoryName.Text != string.Empty)
{
for (int i = 0; i < dgvCategory.Rows.Count; i++)
{
if (dgvCategory.Rows[i].Cells[1].Value.ToString() == txtCategoryName.Text)
{
MessageBox.Show("Choose another name", "", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
isElseLoop = true;
return;
}
}
}
if (!isElseLoop)
{
txtCategoryId.Text = clsCat.getCategoryId().Rows[0][0].ToString();
clsCat.addCategory(txtCategoryName.Text);
MessageBox.Show("Done", "", MessageBoxButtons.OK, MessageBoxIcon.Information);
txtCategoryId.Clear();
txtCategoryName.Clear();
dataPreview();
}
}
catch
{
MessageBox.Show("Erroe save in category", "", MessageBoxButtons.OK, MessageBoxIcon.Error);
return;
}
}