Не удается проверить ячейку в DataGridView - PullRequest
0 голосов
/ 18 сентября 2018

Я программировал приложение winform, и в одной форме у меня есть dataGridView.Конкретный столбец состоит из целых чисел, поэтому DataTable, который является источником сетки, был определен как

  DataTable dt = new DataTable();
  dt.Columns.Add("Partition", typeof(int));
  dt.Columns.Add("Number", typeof(int));

В любом случае, позже я попытаюсь проверить это, чтобы пользователь, например, не вводил"dadada".

Так что я делаю

 private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{int result;
  if (!(int.TryParse(e.FormattedValue.ToString(), out result))) 
      {Trace.Writeline("error");
      return;
      }
}

TryParse, как предполагается, не генерирует исключение, и обрабатывает его хорошо до последнего } при выходе из функцииэто исключение.

Я пытался

 private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
        {

            int result=0;
            try
            {

                result = int.Parse(e.FormattedValue.ToString());
            }
            catch
            {
                MessageBox.Show("error");
                dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = 0;
                return;
            }
            if(result<0)
            {
                MessageBox.Show("positives!");
                return;
            }

        }

И на этот раз перехватчик ловит исключение (Parse), но затем снова возникает другое исключение при выходе из функции.

IИнтересно, что не так и как проверить целочисленный вход в сетку

1 Ответ

0 голосов
/ 18 сентября 2018

Вы должны установить Cancel на true:

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
    dataGridView1.Rows[e.RowIndex].ErrorText = "";
    int result;

    // Don't try to validate the 'new row' until finished editing since there
    // is not any point in validating its initial value.
    if (dataGridView1.Rows[e.RowIndex].IsNewRow) { return; }
    if (!int.TryParse(e.FormattedValue.ToString(), out result))
    {
        e.Cancel = true;
        dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be an integer";
    }
    else if(result < 0)
    {
        e.Cancel = true;
        dataGridView1.Rows[e.RowIndex].ErrorText = "the value must be positive";
    }
}

MSDN показывает хороший пример.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...