如何修复此“ for循环” if语句中的内容

时间:2019-02-15 05:48:22

标签: c# sql-server

我写了嵌套的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”。

2 个答案:

答案 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;
  }
}