2011-12-20 3 views
2

DataGridView 구성 요소를 사용하여 읽기 전용 SQL 쿼리 결과를 사용자에게 쉽고 빠르게 표시 할 수 있습니다. 나는 그것이 원하는대로 작동하도록하지만, 내가 "올바른"방식으로 일을하는지 궁금해 할 필요가있다. 결국 복잡한 구성 요소이며 .NET의 SQL 액세스 및 데이터 바인딩에 완전히 새로운 것입니다.DataGridView에 표시하기 전에 데이터 쿼리 결과를 다시 포맷/변환하는 방법

은 MSDN 도움말을 중간으로 BindingSource 객체를 사용하여 제안, 내가 (잘 작동하는 것 같다) 다음 코드로 왔어요 :

mBindingSource.DataSource = null; 
mBindingSource.Clear(); 

using (SqlDataReader query = GetQuery()) 
{ 
    if ((query != null) && (query.HasRows)) 
    { 
    mBindingSource.DataSource = query; 
    CDataGrid.DataSource = mBindingSource; 
    } 
} 

그러나, 나는 몇 가지를 포맷 할 이 "원시"데이터. 예를 들어, 일부 값은 기본 테이블에 int 또는 byte 유형으로 저장되지만 실제로는 다양한 enum 값을 나타냅니다.

private void CDataGrid_CellFormatting(object sender, DataGridViewCellFormattingEventArgs args) 
{ 
    DataGridViewColumn column = CDataGrid.Columns[args.ColumnIndex]; 
    switch (column.Name) 
    { 
    case FieldNameProductID: 
    case FieldNameVersionID: 
     int? x = args.Value as int?; 
     ProductCode code = (ProductCode)(x ?? 0); 
     args.Value = code.ToString(); 
     break; 

    case FieldNameProductType: 
     byte? y = args.Value as byte?; 
     ProductType type = (ProductType)(y ?? 0); 
     args.Value = type.ToString(); 
     break; 
    } 
} 

이 일을 할 수있는 적절한 방법인가 : 현재 내가 (this MSDN page에서 영감을) 원하는 변환을 수행하려면 다음 코드를 사용하고? 내가 묻는 이유는 마치 BindingSource 객체가 이러한 유형의 변형을 수행하도록 부분적으로 설계된 것처럼 보였기 때문입니다. 그러나 문서를 탐색하기가 어려우며 아직 수행하려는 작업의 좋은 예를 찾지 못했습니다.

답변

1

올바른 방법입니다. CellFormatting 이벤트는 렌더링되기 전에 데이터를 캡처하여 변경할 수 있습니다.

관련 문제