2011-09-01 7 views
0

정렬을 위해 Int64 값을 허용하는 DataGridview 용 셀을 만들고 싶습니다.DataGridView 셀 사용자 지정

또한이 셀은 현재 값과 Dataagridview 외부에있는 참조 값의 차이 인 추가 값을 표시합니다.

문자열로도 처리 할 수 ​​있지만 1, 10, 11, 2 ....와 같이 표시되므로 정렬이 올바르게 처리되지 않습니다.

그래서 사용자 지정 셀을 만들고 셀 값을 길게 정의하고 문자열을 표시하면 좋을 것이라고 생각했지만 ...이 작업을 수행 할 수 있는지 확실하지 않습니다 ....

간단한 방법으로이를 수행하는 방법을 아는 사람이 있습니까? datagridview를 수동으로로드하지만 정렬이 가능하도록 열 유형을 정의 중입니다.

답변

0

DataGridView의 SortCompare 이벤트를 사용하면 매우 간단합니다. 이벤트를 사용하여 정렬중인 열이 사용자 정의 데이터를 표시하는지 확인하고, 그렇다면 해당 데이터의 숫자 부분을 추출하여 정렬을 수행하십시오.

나는 예를 들어이 아래 :

private void dataGridView1_SortCompare(object sender, DataGridViewSortCompareEventArgs e) { 
    if (e.Column.Index == 1) { // This is your custom data's column. 
     // Extract the numeric values from the cells being compared for the sort. 
     // BEWARE: code assumes you'll always be able to extract a long from the cell contents. 
     long cell1NumericValue = Int64.Parse(e.CellValue1.ToString().Split(' ')[0]); 
     long cell2NumericValue = Int64.Parse(e.CellValue2.ToString().Split(' ')[0]); 

     // Compare these numeric values to determine how to sort. 
     e.SortResult = cell1NumericValue.CompareTo(cell2NumericValue); 

     e.Handled = true; 
    } 
} 

가정 :
을 - 사용자 정의 데이터가있는 열은 열 인덱스 1
에 있음 - 사용자 정의 데이터를 적어도 하나의 다음 숫자로 구성되어 있음 공백

또한 내 코드에서는 셀 값의 변환으로 인해 오류가 발생하지 않는다고 가정합니다. 데이터에이 변환이 실패하게하는 값이 포함되어있을 수 있습니다. 이 경우 변환 할 수있는 데이터의 유효성을 검사 할 수 있습니다 (null이 아님 등). 유효성 검사에 실패하면 셀의 숫자 값을 -1로 설정하여 유효 값보다 항상 낮게 설정합니다. 다른 세포. (나는 그것이 의미가 있었으면 좋겠다).

이러한 종류의 정렬 적용은 this MSDN article에 잘 설명되어 있습니다. 당신은 아마보고 싶을 것이다. 예제 중 하나는 타이의 경우에 수행 할 수있는 작업을 보여줍니다 (이 예는 정렬 tiebreaker로서 다른 컬럼에서 정렬하는 것을 보여줍니다).