Дата проверки введена в DataGridView - PullRequest
0 голосов
/ 01 октября 2018

Я пытаюсь проверить введенное Date значение в DataGridViewCell пользователями, и если значение не соответствует определенной схеме, оно должно дать пользователю сообщение типа

введенное значение должно совпадать с форматом дд / мм / гггг

Я пробовал код ниже на 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");
        }
    }
}

, но я все еще получаю сообщение об ошибке ниже

enter image description here

Я пытался использовать регулярное выражение, которое не рекомендовалось, как я нашел при поиске, но оно не работает

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);
}

1 Ответ

0 голосов
/ 01 октября 2018

Вам необходимо отменить редактирование, если введенные данные недействительны с помощью 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
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...