C# 在一个字段C上执行多个验证#

C# 在一个字段C上执行多个验证#,c#,validation,textbox,C#,Validation,Textbox,我必须验证文本框,以检查它们是否是一个数字,以及它们是否在数据库中。唯一的问题是,我似乎只能让它检查有效性或它们是否是数字。如何更改此项以获得两个验证 它进行验证以确保文本框中有内容: if (string.IsNullOrEmpty(employeeIDTextBox.Text) && (string.IsNullOrEmpty(JobIDTextBox.Text))) 然后查看该值是否为数字,如果为数字,则检查此人是否存在,然后设置值 else if (string.IsN

我必须验证文本框,以检查它们是否是一个数字,以及它们是否在数据库中。唯一的问题是,我似乎只能让它检查有效性或它们是否是数字。如何更改此项以获得两个验证

它进行验证以确保文本框中有内容:

if (string.IsNullOrEmpty(employeeIDTextBox.Text) && (string.IsNullOrEmpty(JobIDTextBox.Text)))
然后查看该值是否为数字,如果为数字,则检查此人是否存在,然后设置值

else if (string.IsNullOrEmpty(JobIDTextBox.Text))
     {
        if (!Int32.TryParse(JobIDTextBox.Text, out number1))
        {
           using (dbConn)
           {
              ReportGrid newGrid = new ReportGrid();

              if (newGrid.isValidEmp(Int32TryParseSafe(employeeIDTextBox.Text)))
              {
                  newGrid.startDate = startingdateTimePicker.Value;
                  newGrid.endDate = endingdateTimePicker.Value;

                  newGrid.EmployeeID = Int32TryParseSafe(employeeIDTextBox.Text);
                  newGrid.JobID = Int32TryParseSafe(JobIDTextBox.Text);

                  newGrid.ShowDialog();
               }
               else
               {
                   MessageBox.Show("No ID found for the employee.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }
然后它对另一个文本框执行相同的操作

else if (string.IsNullOrEmpty(employeeIDTextBox.Text))
      {
          if (!Int32.TryParse(emplyeeIDLabel.Text, out number2))
          {
             using (dbConn)
             {
                 ReportGrid newGrid = new ReportGrid();

                 if (newGrid.isValidJob(Int32TryParseSafe(JobIDTextBox.Text)))
                 {
                     newGrid.startDate = startingdateTimePicker.Value;
                     newGrid.endDate = endingdateTimePicker.Value;

                     newGrid.EmployeeID = Int32TryParseSafe(employeeIDTextBox.Text);
                     newGrid.JobID = Int32TryParseSafe(JobIDTextBox.Text);

                     newGrid.ShowDialog();
                   }

                   else
                   {
                      MessageBox.Show("No ID found for that job.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                   }
                }
             }
             else
                MessageBox.Show("Must be a number.");
           }
这是全部代码

try
{

    if (string.IsNullOrEmpty(employeeIDTextBox.Text) && (string.IsNullOrEmpty(JobIDTextBox.Text)))
    {
        MessageBox.Show("Please enter a EmployeeID or JobID.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
     }
     else if (string.IsNullOrEmpty(JobIDTextBox.Text))
     {
        if (!Int32.TryParse(JobIDTextBox.Text, out number1))
        {
           using (dbConn)
           {
              ReportGrid newGrid = new ReportGrid();

              if (newGrid.isValidEmp(Int32TryParseSafe(employeeIDTextBox.Text)))
              {
                  newGrid.startDate = startingdateTimePicker.Value;
                  newGrid.endDate = endingdateTimePicker.Value;

                  newGrid.EmployeeID = Int32TryParseSafe(employeeIDTextBox.Text);
                  newGrid.JobID = Int32TryParseSafe(JobIDTextBox.Text);

                  newGrid.ShowDialog();
               }
               else
               {
                   MessageBox.Show("No ID found for the employee.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                }

             }
         }
         else
            MessageBox.Show("Must be a number.");

         if (startingdateTimePicker.Value > endingdateTimePicker.Value)
         {
             MessageBox.Show("Starting data can not be after than ending date.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
         }
      }
      else if (string.IsNullOrEmpty(employeeIDTextBox.Text))
      {
          if (!Int32.TryParse(emplyeeIDLabel.Text, out number2))
          {
             using (dbConn)
             {
                 ReportGrid newGrid = new ReportGrid();

                 if (newGrid.isValidJob(Int32TryParseSafe(JobIDTextBox.Text)))
                 {
                     newGrid.startDate = startingdateTimePicker.Value;
                     newGrid.endDate = endingdateTimePicker.Value;

                     newGrid.EmployeeID = Int32TryParseSafe(employeeIDTextBox.Text);
                     newGrid.JobID = Int32TryParseSafe(JobIDTextBox.Text);

                     newGrid.ShowDialog();
                   }

                   else
                   {
                      MessageBox.Show("No ID found for that job.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
                   }
                }
             }
             else
                MessageBox.Show("Must be a number.");
           }
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.ToString());
        }

我可能弄错了,但这条线可能是问题所在吗

if (!Int32.TryParse(emplyeeIDLabel.Text, out number2))
感叹号反转bool,因此如果文本成功解析为数字,TryParse函数将返回true,但通过使用感叹号,if语句将解析为false。因此,您将代码发送到else语句,该语句声明它不是一个数字

另外,尝试使用“Return”来避免嵌套的ifs

if (string.IsNullOrEmpty(employeeIDTextBox.Text) && (string.IsNullOrEmpty(JobIDTextBox.Text)))
{
    MessageBox.Show("Please enter a EmployeeID or JobID.", "Alert", MessageBoxButtons.OK, MessageBoxIcon.Warning);
    Return;
 }
此时不需要else,因为如果if语句解析为true,则将从方法返回


嵌套的if语句经常是必需的,但为了使代码更清晰,便于维护,应尽量避免使用它们

你是如何检查它们是否在数据库中的?我建议你把你的两个底部的if放到它们自己的函数中,这样可能会返回bool。然后你可以一个接一个地调用,而不会干扰其他所有的方法,如果是的话。@N4TKD在我的另一个方法中是一个被调用的方法class@DROPtableusers因此,请创建一个可以同时用于两种验证的方法?好吧,那么代码看起来是什么样子的,您对它有什么问题?我们需要了解您是如何调用数据库的,以及您是如何检查数据库是否已经具有该值的。