Я пытаюсь проверить введенное пользователем значение Date в DataGridViewCell, и если значение не соответствует конкретной схеме, оно должно дать пользователю сообщение типа
entered value should match dd/MM/yyyy format
Я пробовал код ниже в событии CellValidating
private void DGV_PatientSessions_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (DGV_PatientSessions.Columns[e.ColumnIndex].Name == "DGV_PatientSessions_Date")
{
string DateValue;
DateTime DateFormated;
DateValue = DGV_PatientSessions.CurrentRow.Cells["DGV_PatientSessions_Date"].Value.ToString();
if (DateTime.TryParseExact(DateValue, "dd/MM/yyyy", new CultureInfo("ar-SY"), DateTimeStyles.None, out DateFormated))
{
MessageBox.Show("done");
}
}
}
но я все еще получаю сообщение об ошибке ниже
Я попытался использовать регулярное выражение, которое не рекомендуется, как я обнаружил при поиске, но оно не работает
string DateFormat;
DateFormat = DGV_PatientSessions.CurrentRow.Cells["DGV_PatientSessions_Date"].Value.ToString();
if (Regex.IsMatch(DateFormat, @"(0[1-9]|[12][0-9]|3[01])[- /.](0[1-9]|1[012])[- /.](19|20)\d\d$"))
{
MessageBox.Show("done");
}
else
{
MessageBox.Show("value should match dd/MM/yyyy format);
}





Вам необходимо отменить редактирование, если введенные данные недействительны с использованием e.Cancel = true;:
private void DGV_PatientSessions_CellValidating(object sender, DataGridViewCellValidatingEventArgs e)
{
if (DGV_PatientSessions.Columns[e.ColumnIndex].Name == "DGV_PatientSessions_Date")
{
string DateValue;
DateTime DateFormated;
DateValue = DGV_PatientSessions.CurrentRow.Cells["DGV_PatientSessions_Date"].Value.ToString();
if (DateTime.TryParseExact(DateValue, "dd/MM/yyyy", CultureInfo.InvariantCulture, DateTimeStyles.None, out DateFormated))
{
MessageBox.Show("done");
}
else
{
MessageBox.Show("value should match dd/MM/yyyy format");
e.Cancel = true; // The important part
}
}
}
@sam Извините, я не перепроверил ваш тест синтаксического анализа DateTime, чтобы убедиться, что вы делаете это правильно. При условии, что вы есть, вот как вы справитесь с этим. Я предполагаю, что это не так, что было бы совершенно другим и отдельным вопросом.
@sam Я отредактировал свой ответ, чтобы использовать `CultureInfo.InvariantCulture '- посмотрите, имеет ли это значение.
та же проблема ничего не изменилось
Я пробую, и теперь я всегда получаю часть else, и я не могу вводить данные, даже если ячейка в
datagridviewравна нулю, проверка коротких слов всегда ложна