2013-11-11 8 views
0

Я хочу изменить задний цвет ячейки в DataGridView, когда он редактируется. Все решения, которые я пробовал, применяют цвет, когда я выхожу из ячейки. Потому что я хочу, чтобы пользователи набирали что-то, и в событии Cell_Validating, если значение не проходит правил, я окрашиваю ячеек запретить пользователю выходить из ячейки. Ниже приведен код, который я попробовал:
Изменить ячейку Назад Цвет в режиме редактирования

DataGridViewCellStyle CellStyle = new DataGridViewCellStyle(); 
CellStyle.BackColor = Color.Red; 
dgvAddAssets.CurrentCell.Style = CellStyle; 

ответ

0

Один из вариантов будет создать свой собственный класс CustomDataGridView, который наследуется от класса DataGridView и переопределить соответствующие методы, такие как KeyDown, ProcessDialogKey и т.д.

Другой вариант заключается в использовании следующий код, который немного сложнее. Что он делает, это принуждение пользователя вставить действительные данные. Если введено неверное значение, текущая ячейка будет окрашена в красный цвет и вернется в режим редактирования. В этом примере допустим недопустимое значение: "InavlidValue".

Во-первых, добавить эти поля (нам нужно, чтобы они были разделены между различными событиями):

private bool colorCell = false; 
private DataGridViewCell cell; 

Добавить и присоединить эти события:

private void dataGridView1_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 
{ 
    // Here we check for the invalid value, and store the cell position for later use 
    if (e.FormattedValue.ToString() == "InvalidValue") 
    { 
     colorCell = true; 
     cell = dataGridView1[e.ColumnIndex, e.RowIndex]; 
    } 
} 

private void dataGridView1_CellValidated(object sender, DataGridViewCellEventArgs e) 
{ 
    // When value is valid, change color back to normal 
    dataGridView1.CurrentCell.Style.BackColor = Color.White; 
} 

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
{ 
    // User inserted invalid value, color the cell and return to edit mode 
    if (colorCell) 
    { 
     dataGridView1.CurrentCell = cell; 
     dataGridView1.CurrentCell.Style.BackColor = Color.Red; 
     dataGridView1.BeginEdit(true); 
     colorCell = false; 
    } 
} 
+0

Спасибо за ваш ответ. Но я делаю 'e.Cancel = true', если проверка не прошла. Таким образом, пользователь не сможет выйти из ячейки, поэтому событие «Selection_Changed» не будет удалено. – lbrahim

+0

В моем примере он также вернется в режим редактирования, поэтому эффект будет таким же, как e.Cancel = true. Попробуй, я думаю, это то, что ты ищешь. – etaiso

+0

Вы были правы. Ваше решение работает, но не полностью. Поскольку курсор переместится в следующую ячейку и не остается на ячейке, отмеченной как красная. – lbrahim

Смежные вопросы