2009-10-15 5 views
0

DataGridView가 있고 이벤트 CellFormatting을 처리합니다.CellFormatting 이벤트에서 DataGridViewRow를 가져 오는 방법은 무엇입니까?

DataGridViewCellFormattingEventArgs e 

거기에 e.RowIndex

로 : 그것은라는 매개 변수가 있습니다.

은 내가 할 경우 :

DataGridView.Rows[e.RowIndex] 

나는 모음에서 적절한 행을 얻을.

그러나 열 머리글을 클릭하여 기본 열 및 사용자 DataGridView.Rows [e.RowIndex] 이외의 열을 기준으로 정렬 할 때 유효하지 않은 행이 표시됩니다.

행 컬렉션이 DataGridView의 행 순서를 반영하지 않기 때문입니다.

그래서 DataGridView의 RowIndex에서 속성 DataGridViewRow를 얻으려면 어떻게해야합니까?

답변

2

필자의 이해가 정확하다면 디스플레이 색인을 기반으로하지 않고 데이터 소스의 색인을 기반으로 특정 행의 형식을 지정하려고합니다. 이 경우 DataGridViewRow의 DataBoundItem 속성을 사용할 수 있습니다. 데이터 소스가 데이터 테이블이라는 점을 감안할 때,이 항목은 DataGridViewRow가 될 것입니다.이 DataGridViewRow에는 Row라는 속성이있어서 원본 데이터 소스에서 인덱스를 찾을 수 있습니다. 아래 예를 참조하십시오.

DataTable t = new DataTable(); //your datasource 
int theIndexIWant = 3; 

private void dataGridView1_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e) 
{    
    DataRowView row = dataGridView1.Rows[e.RowIndex].DataBoundItem as DataRowView;  

    if (row != null && t.Rows.IndexOf(row.Row) == theIndexIWant) 
    { 
     e.CellStyle.BackColor = Color.Red; 
    } 
} 
관련 문제