Как наиболее просто проверять значения ячеек DataGridView, получающего значения из базы?

У меня есть DataGridView для нескольких таблиц, ячейки могут содержать даты(очень проблематично в проверке), float значения - для цены, для городов - логичное условие, что только буквы, но города могут содержать и символы-разделители "-", теоретически. Также, по-хорошему, в некоторых столбцах, чтобы не проводить подобную проверку через базу, необходимо проверять, чтобы в добавляемой или редактируемой строке не было значений, которые уже есть в базе, к примеру номера телефонов, паспорта и прочее. Рекомендуется проверять через CellValueChanged. Код, который есть на данный момент, только меняет значение операции справа от колонки на Update.

        private void TourTable_CellValueChanged_1(object sender, DataGridViewCellEventArgs e)
    {
        try
        {
            if (newTourRowAdding == false)
            {

                int rowIndex = TourTable.SelectedCells[0].RowIndex;

                DataGridViewRow TourEditingRow = TourTable.Rows[rowIndex];
                DataGridViewLinkCell linkCell = new DataGridViewLinkCell();
                TourTable[5, rowIndex] = linkCell;

                TourEditingRow.Cells["Command"].Value = "Update";

            }
        }
        catch (Exception ex)
        {
            System.Windows.Forms.MessageBox.Show(ex.Message, "Ошибка!", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }

По-хорошему, надо как-то перехватывать событие DataError. Попробовал использовать самописные регулярные выражения, используемые когда-то для TextBox, но результат таков, что либо не срабатывают, либо срабатывают все одновременно. Пример:

            if (!Regex.Match(ClientsTable.Columns[1].ToString(), @"[а-яА-Я]|[a-zA-Z][-]").Success)
            {
                MessageBox.Show("Может содержать только буквы и символ-разделитель «-» ");
            }

            if (!Regex.Match(ClientsTable.Columns[2].ToString(), @"[0-9|[+]").Success)
            {
                MessageBox.Show("Может содержать только цифры и символ «+» в начале");
            }

            if (!Regex.Match(ClientsTable.Columns[4].ToString(), @"[0-9]").Success)
            {
                MessageBox.Show("Может содержать только цифры");
            }
            if (!Regex.Match(ClientsTable.Columns[5].ToString(), @"[0-9][a-zA-Z]").Success)
            {
                MessageBox.Show("Может содержать только цифры и 4 латинские буквы в начале");
            }

Ответы (0 шт):