2015-06-15 2 views
0

У меня есть две ячейки datagridview, grid1 и grid2. Я загружаю файлы в обе сетки, я использовал версию файла. каждый раз, когда я сохраняю/редактирую файл, он увеличивает версию файла на 1 из 5, что означает, что это будет 6,7,8,9 и т. д.Как изменить цвет фона ячейки, если ячейка редактируется

версия файла начинается с 5. Приращение работает без проблем

Я хочу изменить цвет фона ячейки, если я загрузил файл и отредактировал, отредактировав эту ячейку, он должен изменить цвет фона на желтый.

  1. Загрузите существующий файл
  2. Редактировать файл
  3. Цвет фона редактируемой ячейки должен измениться на желтый
  4. Сохранить файл и очистить цвет (это работает)

I пробовал это, но он выделяет цвет, когда я создал файл. Мне нужно только изменить цвет фона фона только при редактировании файла.

мой код:

int version_Number = 5; 
    string _OriginalValue; 
    private void Grid1_CellBeginEdit_1(object sender, DataGridViewCellCancelEventArgs e) 
    { 
     try 
     { 
      _OriginalValue = Grid1[e.ColumnIndex, e.RowIndex].Value.ToString(); 
     } 
     catch (Exception ex) 
     { 
      MessageBox.Show("Error occured.\nError message: " + ex.Message, "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Error); 
     } 
    } 


    #region Grid2_CellEndEdit_1 
    private void Grid2_CellEndEdit_1(object sender, DataGridViewCellEventArgs e) 
    { 
     try 
     { 
      DataGridViewCell cell = Grid2[e.ColumnIndex, e.RowIndex]; 
      if (cell.Value.ToString() != _OriginalValue) 
      { 
       if (version_Number >= 1000) 
       { 
        cell.Style.BackColor = Color.Yellow; 
       } 
      } 
+0

Там нет стыда, используя флаг когда-либо сейчас и потом. Перед загрузкой данных установите значение «bool loading = true», а затем - «false». Проверьте это в событии 'CellEndEdit'! – TaW

+0

Можете ли вы показать мне, как? –

+0

Мой ответ предполагает, что ваш код окраски работает, за исключением проблемы с загрузкой. – TaW

ответ

0

Вы должны обрабатывать ту часть, которая окрашивает клетки в случае cellformating, образец я пытался как ниже

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
     { 
      DataGridViewCell cell = dataGridView1[e.ColumnIndex, e.RowIndex]; 
      if (cell.Value != null) 
      { 
       if (cell.Value.ToString() != _OriginalValue) 
       { 

        cell.Style.BackColor = Color.Yellow; 

       } 
      } 

    } 
0

Вы можете использовать флаг чтобы прекратить окрашивание во время загрузки данных:

int version_Number = 5; 
string _OriginalValue; 

bool loading = false; 

Вы где-то загружаете данные; Теперь установить и сбросить флаг там:

loding = true; 
yourDataLoadingCodeHere; 
loading = false; 

Теперь, если в противном случае они работают, вы можете просто прервать свои два события:

private void Grid1_CellBeginEdit_1(object sender, DataGridViewCellCancelEventArgs e) 
{ 
    if (loading) return; 

    try 
    { 
     _OriginalValue = Grid1[e.ColumnIndex, e.RowIndex].Value.ToString(); 
    } 
    catch (Exception ex) 
    { 
     MessageBox.Show("Error occured.\nError message: " + 
     ex.Message, "Error Occured", MessageBoxButtons.OK, MessageBoxIcon.Error); 
    } 
} 



private void Grid2_CellEndEdit_1(object sender, DataGridViewCellEventArgs e) 
{ 
    if (loading) return; 

    try 
    { 
    DataGridViewCell cell = Grid2[e.ColumnIndex, e.RowIndex]; 
    if (cell.Value.ToString() != _OriginalValue) 
    { 
     if (version_Number >= 1000) 
     { 
      cell.Style.BackColor = Color.Yellow; 
     } 
    } 
    .. 
    .. 
Смежные вопросы