2010-08-04 6 views
6

안녕하세요, DatagridView가 있는데 각 행의 데이터에 따라 배경색을 변경하고 싶습니다.DatagridView 업데이트 행 데이터를 기반으로하는 셀 배경색

Ex.

| 사람 1 | 사람 2 | 사람 3 |

| ---- 100 ---- | 200 ----- | ----- 150 ---- |

| ---- 300 ---- | --- 100 ----- | ------ 50 ---- |

첫 번째 행에서 나는 "100"을 빨간색 배경색과 "200"녹색으로 만들고 싶습니다. 또는 가장 낮은 값 = 빨간색 최고 = 녹색

이제는 내 데이터에 BindingList를 사용하고 InotifyPropertyChanged를 사용하여 비동기로 업데이트됩니다. 따라서 값 중 하나가 업데이트 될 때마다 확인하는 방법이 필요합니다.

DataGridView에 유용한 이벤트가 있습니까?

답변

9

DataGridView의 하위 클래스를 만들고 OnCellFormating()을 재정 의하여 여기에서 셀 값을 검사하고 색상을 적절하게 설정할 수 있습니다.

해당 이벤트를 사용하는 방법에 대한 아래 주석에 관해서는 가능하지만 가상 메서드는 성능이 뛰어나며 DataGridView는 그리드의 모든 동작을 한 곳에서 캡슐화합니다.

+0

CellFormatting은 이벤트이므로 하위 클래스를 만들 필요가 없으므로 간단히 이벤트에 가입 할 수 있습니다. 둘 다 똑같은 일을합니다. – Tergiver

+0

Thx, OnCellFormatting 이벤트가 유망 해 보입니다. 그냥 작은 테스트 개인 무효의 prisListeView_CellFormatting (개체를 보낸 사람, DataGridViewCellFormattingEventArgs 전자) { 를 한 경우 (e.Value! = NULL) 경우 (e.ColumnIndex의 == 3 && (10 진수) e.Value> 0) { e.CellStyle.BackColor = Color.DodgerBlue; } } 하지만 다른 셀의 스타일을 변경하려면 어떻게해야합니까? 전의. 위의 칼럼 3에서 변경되었습니다. 그러면 다른 셀의 스타일을 어떻게 변경합니까? – gulbaek

+0

이 솔루션의 성능 확실하지만 :-) 작동 그리고 누군가가 다른 셀 스타일을 변경하는 방법을 알 필요가있는 경우, 여기에 코드입니다하지 datagridview1.Rows [e.RowIndex] .Cells [ "myColumn"]. Style.BackColor = Color.DeepPink; – gulbaek

1

이것이 최적의 솔루션인지는 모르지만 도움이되기를 바랍니다. DataGrid 뷰에서 각 데이터 소스 항목에 대한 PropertyChanged 이벤트에 등록하십시오. 이벤트 처리기에서 변경된 값을 기반으로 필요한 작업을 수행 할 수 있습니다.
데이터 소스에 대한 바인딩 목록을 사용하는 경우 ListChanged에 등록하여 새 항목을 처리하십시오.