Как наиболее просто проверять значения ячеек 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 латинские буквы в начале");
}