2012-03-20 2 views
0

C# Winform 프로젝트에 datagridview가 있습니다. 이 datagridview는 값을 데이터베이스에 삽입하는 데 사용됩니다. 각 열은 해당 db 열과 일치합니다.DataGridView C# 편집 후 값 형식 편집

열 중 하나가 DateTime 열입니다. 이 날짜가 올바른 형식인지 확인하기 위해이 날짜를 '확인'하고 싶습니다. 이상적으로는 셀을 나가고 선택한 날짜 형식으로 변환합니다.

이 기능을 만들기 위해 일련의 이벤트를 사용했지만 문제가 발생했습니다. 내가 가지고있는 문제는 이벤트가 시작될 때 값이 아직 셀에 저장되지 않았다는 것입니다. 내가 예를 들어 같은 것을 할 때 따라서 :

private void Grid_Modify_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
{ 
    if (Grid_Modify.Columns[e.ColumnIndex].Name == "DateTime") 
    { 
     Grid_Modify[e.ColumnIndex, e.RowIndex].Value = 
      Convert.ToDateTime(Grid_Modify[e.ColumnIndex, e.RowIndex].Value).ToString("YYYY-MM-DD hh:mm:ss"); 
    } 
} 

문제이며, 그것은 날짜로 변환 된 값은 원래 셀 값은 - 난 그냥 입력하지 새로운 값. 셀 값을 업데이트하기 전에 이벤트가 발생하기 때문입니다.

질문 : 값을 변경할 때 날짜 형식을 지정하는 가장 좋은 방법은 무엇입니까?

내가 시도한 다른 이벤트는 다음과 같습니다. CellLeave, CellValueChanged, CellValidated 및 CellEndEdit.

참고 : CellValueChanged 이벤트는 실제로 새 셀 값을 가져올 수있는 유일한 이벤트 였지만 이벤트 핸들러 내에서 값을 변경하면 무한 루프에 걸리게됩니다. CellValueChanged에,

private bool _inCellValueChanged = false; 

다음 :

답변

4

간단한은 무한 루프를 방지하기 위해 CellValueChanged 이벤트 핸들러로 돌아가서 전역 변수를 사용하는 것입니다

if (!_inCellValueChanged && Grid_Modify.Columns[e.ColumnIndex].Name == "DateTime") 
{ 
    _inCellValueChanged = true;   
    Grid_Modify[e.ColumnIndex, e.RowIndex].Value = Convert.ToDateTime(Grid_Modify[e.ColumnIndex, e.RowIndex].Value).ToString("YYYY-MM-DD hh:mm:ss"); 
    _inCellValueChanged = false; 
} 
+0

내가 가고 있었다 두려워했다 그와 같은 것을 가지고 있어야만합니다. – ImGreg

+0

내가 가진 관련 문제는 "Time Columns"라고 불리는데도 새로운 시간 값을 입력했을 때 현재 날짜가 기본값 인 TimeColumns가 모두 표시된다는 것입니다 DateTime 부분과 모든 사용자 편집 할 수있는 부분은 시간 부분입니다. 이것은 실용적인 해결책이었습니다. – mickeyf