2015-04-10 2 views
0

Я создаю динамический DataGridView из возвращенной таблицы DB. Мне нужно изменить некоторые ячейки на красный на основе значения. Я назначил функцию для события CellFormatting, но функция вызывается каждый раз, когда пользователь нажимает на любую ячейку/строку (что замедляет форму).DataGridView вызов CellFormatting только один раз

Я хотел бы выполнить функцию только при загрузке.

Я попытался установить стиль, зациклив стол, но задний цвет не изменился. Я получил его для работы только при использовании события CellFormatting.

код у меня есть:

this.dgv.CellFormatting += new System.Windows.Forms.DataGridViewCellFormattingEventHandler(this.Dgv_CellFormatting); 

и в функции изменить цвет

private void Dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
    { 
     if (e.Value != null) 
     { 
      if (e.ColumnIndex == 0) 
      { 
       if ((int)e.Value >= 5) 
       { 
        e.CellStyle.BackColor = Color.Red; 
       } 
      } 
     } 

    } 
+0

Пожалуйста, пост любой код у вас есть до сих пор. –

ответ

1

Вы можете поместить свой код в «DataBindingComplete».

Пример

private void dgv_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e) 
{ 
    dgv.Rows[0].Cells[0].Style.BackColor = Color.Red; 
} 
+0

Большое вам спасибо, отлично работает. – Mike

0

Использование GridView_RowDataBound событие.

+0

это будет выполняться один раз в случае загрузки или привязки данных. DataControlRowType.Datarow гарантирует, что верхние и нижние колонтитулы исключены из цикла – saj

+0

Я не могу найти событие RowDataBound. this.dgv. * не имеет этого события. – Mike

+0

Майк сожалеет, что я плохо думал о веб-формах для winforms, которые вы могли бы использовать DataGrid.LoadingRow, возникает после создания экземпляра DataGridRow, так что вы можете настроить его до его использования. https://msdn.microsoft.com/en-us/library/system.windows.controls.datagrid.loadingrow(v=vs.110).aspx – saj

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