2010-12-15 6 views
11

데이터 바인딩 된 항목에 따라 각 행의 배경이 다른 DataGridView가 있습니다. 그러나 행을 선택할 때 원래 배경색을 더 이상 볼 수 없습니다. DataGridView 행 : 선택시 반투명 선택 또는 행 테두리

이 문제를 해결하려면

는, 나는 두 솔루션의 생각 :

내가 선택은 반 투명하게 만들 수 있으며, 선택한 두 행이 다른 배경 색상이있는 경우 가능을 참조 할 수있다.

또는; 선택 색상을 완전히 제거하고 선택한 행 주위에 테두리를 그릴 수 있습니다.

어떤 옵션이 더 쉽고 어떻게 할 수 있습니까?

이것은 WinForm 앱입니다.

편집 : 나는이 반투명 선택 색상의 느낌을주는

private void dgv_RowPrePaint(object sender, DataGridViewRowPrePaintEventArgs e) 
    { 
     if (dgv.Rows[e.RowIndex].Selected) 
     { 
      var row = dgv.Rows[e.RowIndex]; 
      var bgColor = row.DefaultCellStyle.BackColor; 
      row.DefaultCellStyle.SelectionBackColor = Color.FromArgb(bgColor.R * 5/6, bgColor.G * 5/6, bgColor.B * 5/6); 
     } 
    } 

표류, 코드의 일부를 사용하여 끝났다. 당신의 도움을 주셔서 감사합니다!

답변

7

선택한 행 주위에 테두리를 그리려면 DataGridView.RowPostPaintEvent을 사용하고 선택 색상을 '지우려면'DataGridViewCellStyle.SelectionBackColorDataGridViewCellStyle.SelectionForeColor 속성을 사용할 수 있습니다. 예를 들어

, 나는이

row.DefaultCellStyle.BackColor = Color.LightBlue; 
row.DefaultCellStyle.SelectionBackColor = Color.LightBlue; 
row.DefaultCellStyle.SelectionForeColor = dataGridView1.ForeColor; 

같은 행의 셀 스타일을 설정하면 내가 RowPostPaintEvent

private void dataGridView1_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e) 
{ 
    if (dataGridView1.Rows[e.RowIndex].Selected) 
    { 
     using (Pen pen = new Pen(Color.Red)) 
     { 
      int penWidth = 2; 

      pen.Width = penWidth; 

      int x = e.RowBounds.Left + (penWidth/2); 
      int y = e.RowBounds.Top + (penWidth/2); 
      int width = e.RowBounds.Width - penWidth; 
      int height = e.RowBounds.Height - penWidth; 

      e.Graphics.DrawRectangle(pen, x, y, width, height); 
     } 
    } 
} 

에이 코드를 추가 할 수 있으며 선택한 행은 다음과 같이 표시됩니다

row with border

+0

나는 이것을 발사했다. 그리고 그것은 좋았다. 그런 다음 새로운 문제가 나타났습니다. 투명 선택 색상은 정렬 이후에 실제로보기 흉하게 보였습니다 (텍스트는 오래된 텍스트와 물건에 대해 설명하기가 어려웠습니다)). 그래서 다른 해결책을 찾아 보겠습니다. –

+0

대신 코드를 사용하여 반투명 선택 색상을 만들었습니다. 편집을 참조하십시오. 당신의 도움을 주셔서 감사합니다! –