2016-07-28 3 views
3

Im, заполняющий Datagridview из базы данных, напрямую присваивая таблицу данных. Есть некоторые столбцы в Datagridview, которые доступны для редактирования, а некоторые - нет. Я хочу установить цвет редактируемые столбцы, чтобы сказать «Желтый».Установите цвет колонок DataGridview на основе редактируемого свойства

Я знаю, что я могу установить цвет столбца как

myGrid.Columns["myColumn"].DefaultCellStyle.BackColor = Color.Red; 

Но как проверить редактируемый propety и установить цвет, основываясь на том, что?

ОБНОВЛЕНИЕ: Это то, что я ищу ... желтые ячейки должны быть доступны для редактирования. В основном ячейки под словом WholeSaleRate, Retail Rate и т. Д. Должны быть доступны для редактирования.

enter image description here

ответ

1

Как я мог понять ваш вопрос, который вы хотите изменил цвет редактируемой cells из datagridview?

Вы можете достичь этого, используя DataGridViewCellFormattingEvent событие datagridview и проверьте столбец, если он readonly затем изменить фон в datagridviewcell.

private void dgv_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{ 
    if (!dgv.Columns[e.ColumnIndex].ReadOnly) 
    { 
     e.CellStyle.BackColor = Color.Yellow; 
    } 
} 

Выход:

enter image description here

+0

Im пытается сейчас ... – techno

+0

Я попробовал это, но желтый появляется для не редактируемых ячеек и является случайным .. – techno

+0

Я добавил '!' перед 'dgv' в' if statement' –

0

Используйте RowPostPaint event

void dataGridView1_RowPostPaint(object sender, 
    DataGridViewRowPostPaintEventArgs e) 
{ 
    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (row.Cells["myColumn"].Value == "editable") 
      row.Cells["myColumn"].Style.BackColor = Color.Yellow; 
     else 
      row.Cells["myColumn"].Style.BackColor = Color.Red; 
    } 
} 

Вы также можете переопределить метод рисования, как было отмечено here.

+0

Спасибо .., но получаю эту ошибку 'объект» не содержит определение для „клеток“ и не метод расширения „Cells“ принимать первый аргумент типа «объект» может быть найден (вам не хватает директивы использования или ссылки на сборку?) 'для rows.Cells – techno

+0

Один секунда, глядя в нее. – FrankerZ

+0

Попробуйте сейчас. Обновлен мой ответ – FrankerZ

0

Это всего лишь образец кода для редактирования столбца, dgvSample - это DataGridView, который вы добавили в форму. Здесь я сделал все нечетные столбцы редактируемыми. Таким образом, вы также можете иметь скрытый столбец с флажком и проверить, можно ли его изменить и добиться того же.

dgvSample.AllowUserToAddRows = false; 
dgvSample.AllowUserToDeleteRows = false; 

for (int i = 0; i <= 10; i++) 
{ 
    string[] values = new string[] { "1", "Name" }; 
    dgvSample.Rows.Add(values); 
    if (i % 2 == 0) 
    { 
     DataGridViewRow r = dgvSample.Rows[dgvSample.Rows.Count - 1]; 
     r.ReadOnly = true; 
    } 
    else 
    { 
     r.DefaultCellStyle.BackColor = Color.Yellow; 
    } 
} 
+0

Спасибо ... но это сбой приложения .. – techno