none
Контроль ввода данных в базу RRS feed

  • Вопрос

  • Хотелось бы сделать следующее:
    1. Запретить непосредственный ввод данных в поле даты и разрешить ввод данных только из календаря
    2. Проверить значении, вводимое в числовое поле, и заменить системное сообщение об ошибке своим сообщением.
    Подскажите, пожалуйста, как это сделать. Я пытался по пункту 2 сделать так:

    private void dgv1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
      if (e.ColumnIndex == 3 && dgv1.CurrentCell.Value.ToString() != "")
      {
        int num;
        Boolean bl = int.TryParse(dgv1.CurrentCell.Value.ToString(), out num);
        if (bl == false)
        {
          MessageBox.Show("Введенные данные не соответствуют формату числа!", "Программа для изучения C#", MessageBoxButtons.OK);
        }
      }
    }
    но получается ерунда: если вводить в числовое поле числа - то все нормально работает, а если вводить строки, то появляется системное сообщение. Если e.ColumnIndex == 3 && dgv1.CurrentCell.Value.ToString() != "" заменить на e.ColumnIndex == 3, то при первом же щелчке на поле появляется мое сообщение об ошибке, поскольку значение ячейки пустое (""). Проект без моих неправильных функций расположен по ссылке http://yadi.sk/d/UetKyFPs4hb_I

    Alex

    • Перемещено PashaPash 11 мая 2013 г. 10:44

Ответы

  • 1. Посмотрите руководство  по размещению элементов управления в ячейках DataGridView. Там даже приведен готовый пример с элементом управления DateTimePicker. 

    2. Вам нужно проверять значение e.FormattedValue, а не CurrentCell.Value. Я немного поправил ваш пример:

    private void dgv1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
    {
      if (e.ColumnIndex == 3 && Convert.ToString(e.FormattedValue) != ""))
      {
        Int32 num;
        if (Int32.TryParse(e.FormattedValue.ToString(), out num))
        {
            dgv1.Rows[e.RowIndex].ErrorText = "";
        }
        else
        {
            dgv1.Rows[e.RowIndex].ErrorText = "ERROR";
            e.Cancel = true;
        }
      }
      else
      {
          dgv1.Rows[e.RowIndex].ErrorText = "";
      }
    }