У меня есть DataGridview с несколькими столбцами, и один из столбцов - DataGridViewComboBoxColumn.
Сценарий таков: когда пользователь выбирает какое-либо значение из выпадающего списка (выбранный индекс> 0), вся строкавыбранная ячейка будет показана белым цветом.Если пользователь выбирает пустое значение для комбинированного списка (выбранный индекс равен 0), тогда вся строка будет отображаться желтым цветом, а эта ячейка комбинированного списка должна отображаться красным цветом.
Я мог бы добиться показа целогострока желтого цвета, за исключением столбца со списком.
private void grdCurve_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
{
//for datatype column
if (grdCurve.CurrentCell.ColumnIndex == DATATYPE_COLUMN_INDEX)
{
// Check box column
ComboBox comboBox = e.Control as ComboBox;
comboBox.SelectedIndexChanged -= new EventHandler(comboBox_SelectedIndexChanged);
comboBox.SelectedIndexChanged += new EventHandler(comboBox_SelectedIndexChanged);
}
}
void comboBox_SelectedIndexChanged(object sender, EventArgs e)
{
if (selectedIndex >= 0)
{
if (!ValidateMnemonic(mnRow, row))
{
MarkInvalidRow(row);
}
else
{
MarkValidRow(row);
}
}
}
private void MarkInvalidRow(DataGridViewRow row)
{
DataGridViewCellStyle style = new DataGridViewCellStyle();
if (m_InvalidRowTable.Count > 0)
{
if (m_InvalidRowTable.ContainsKey(row.Index))
{
int col = Convert.ToInt32(m_InvalidRowTable[row.Index]);
DataGridViewCell cell = row.Cells[col];
MarkInvalidRowColor(row);
style.BackColor = Color.Red;
style.SelectionBackColor = Color.Red;
cell.Style = style;
if (grdCurve.CurrentCell is DataGridViewComboBoxCell)
{
grdCurve.CurrentCell.Style = style;
}
}
else
{
MarkInvalidRowColor(row);
}
}
else
{
MarkInvalidRowColor(row);
}
m_InvalidRowTable.Remove(row.Index);
}
private void grdCurve_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
//do nothing
}
private void grdCurve_CurrentCellDirtyStateChanged(object sender, EventArgs e)
{
if (grdCurve.CurrentCell is DataGridViewCheckBoxCell)
grdCurve.CommitEdit(DataGridViewDataErrorContexts.Commit);
if (grdCurve.CurrentCell is DataGridViewComboBoxCell && grdCurve.IsCurrentCellDirty)
grdCurve.CommitEdit(DataGridViewDataErrorContexts.Commit);
grdCurve.EndEdit();
}
Когда я изменяю элемент в поле со списком на пустой, я ожидаю, что поле со списком будет отмечено красным цветом.Но он отображается белым цветом, и когда я нажимаю на какую-то другую ячейку, в ячейке со списком обновляется красный цвет.
Пожалуйста, помогите.
Спасибо, Прасад