2009-06-26 5 views
4

Как изменить «стиль выбора» в DataGridView (winforms)?DataGridView выбранный тип ячейки

+0

Уточненный вопрос. Я имел в виду: изменить вид _whole_ (стиль, фон включен) ячейки, которая выбрана _is_, _when_ она выбрана. Нет смысла менять стиль, если вы никогда не видите визуальное изменение. Я очень сожалею о недоразумении :-(Мой бедный английский ударил снова. Извините) -: –

ответ

5

Вы можете легко изменить ForeColor и BackColor из selcted клеток путем присвоения значения в SelectedBackColor и SelectedForeColor из DefaultCellStyle Сетка в ,

Если вам нужно сделать дальше стилизации вам вам нужно обрабатывать событие SelectionChanged

Edit: (Другие примеры кода содержат ошибки, настраивая для нескольких выбранных ячеек [как в FullRowSelect])

using System.Drawing.Font; 

private void dataGridView_SelectionChanged(object sender, EventArgs e) 
     { 

      foreach(DataGridViewCell cell in ((DataGridView)sender).SelectedCells) 
     { 
      cell.Style = new DataGridViewCellStyle() 
      { 
       BackColor = Color.White, 
       Font = new Font("Tahoma", 8F), 
       ForeColor = SystemColors.WindowText, 
       SelectionBackColor = Color.Red, 
       SelectionForeColor = SystemColors.HighlightText 
      }; 
     } 
     } 
+0

SelectedBackColor, SelectedForeColor OK. Кажется, нет способа установить разные цвета для разных ячеек. :-( –

+0

SelectedBackColor и SelectedForeColor при использовании в свойстве DefaultCellStyle будут применять одни и те же цвета к любой выбранной ячейке. Если вы хотите установить стиль для разных ячеек, еще раз ответ будет обрабатывать событие SelectionChanged и выполнить некоторое условное присвоение на основе строки или столбца выбранной ячейки. – Luis

+0

Спасибо !!!! именно то, что я искал ... Жаль, что я не могу голосовать! –

1

Использовать SelectedCells property GridView и Style property DataGridViewCell.

+0

ничего хорошего. Испытано с DataGridView на пустой форме, используя этот код (только изменяет первую выбранную ячейку): частная пустота dataGridView1_SelectionChanged (объект отправителя, EventArgs е) { dataGridView1.SelectedCells [0] = .Style.BackColor Color.Beige; } Этот стиль отображается только после того, как выбор был изменен на другую ячейку. –

1

Обрабатывать событие SelectionChanged на вашем DataGridView и добавить код, который выглядит примерно так:

private void dataGridView1_SelectionChanged(object sender, EventArgs e) 
    { 
     foreach (DataGridViewRow row in this.dataGridView1.Rows) 
     { 
      foreach (DataGridViewCell c in row.Cells) 
      { 
       c.Style = this.dataGridView1.DefaultCellStyle; 
      } 
     } 


     DataGridViewCellStyle style = new DataGridViewCellStyle(); 
     style.BackColor = Color.Red; 
     style.Font = new Font("Courier New", 14.4f, FontStyle.Bold); 
     foreach (DataGridViewCell cell in this.dataGridView1.SelectedCells) 
     { 
      cell.Style = style; 
     } 
    } 
+0

Протестировано. Неполное. Фон не применяется, а шрифт. Weird –

+1

Используется фон IS, но цвет «Выбор» переопределяет его. Если вы дважды щелкните в ячейке для редактирования, вы увидите цвет фона. – BFree

0

Вы можете попробовать решение, представленное в этом topic. Я протестировал и одобрил его.

Надеюсь, что помогло.

0

При этом вы можете даже нарисовать цветную рамку для выбранных ячеек.

private void dataGridView_CellPainting(object sender, DataGridViewCellPaintingEventArgs e) 
{ 
    if (e.RowIndex >= 0 && e.ColumnIndex >= 0) 
    { 
     if (dataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Selected == true) 
     { 
      e.Paint(e.CellBounds, DataGridViewPaintParts.All & ~DataGridViewPaintParts.Border); 
      using (Pen p = new Pen(Color.Red, 1)) 
      { 
       Rectangle rect = e.CellBounds; 
       rect.Width -= 2; 
       rect.Height -= 2; 
       e.Graphics.DrawRectangle(p, rect); 
      } 
      e.Handled = true; 
     } 
    } 
} 
Смежные вопросы