사용자가 콤보 상자 (DataGridViewComboBoxColumn
)에서 값을 선택할 수있는 DataGridView 열이 있습니다. 우리는 선택을위한 검증 로직을 가지고 있습니다 (오버라이드 된 OnCellValidating
).사용자가 새 값으로 변경하면 DataGridViewComboBoxCell 유효성 검사
귀찮은 것은 사용자가 콤보 상자에서 드롭 다운 선택을 한 후에 다른 곳을 클릭해야만 해당 셀에 대한 유효성 검사가 수행된다는 것입니다. 선택한 색인이 변경되면 바로 편집을 시도했지만 (아래 참조) 셀이 포커스를 잃을 때까지 유효성 검사가 실행되지 않습니다. 또한 CommitEdit()
대신 EndEdit()
을 사용해 보았습니다.
사용자가 콤보 상자에서 항목을 선택하자마자 유효성 검사를 수행 할 수있는 방법이 있습니까?
protected override void OnEditingControlShowing(DataGridViewEditingControlShowingEventArgs e)
{
// Validate selection as soon as user clicks combo box item.
ComboBox combo = e.Control as ComboBox;
if (combo != null)
{
combo.SelectedIndexChanged -= combo_SelectedIndexChanged;
combo.SelectedIndexChanged += new EventHandler(combo_SelectedIndexChanged);
}
base.OnEditingControlShowing(e);
}
void combo_SelectedIndexChanged(object sender, EventArgs e)
{
this.NotifyCurrentCellDirty(true);
this.CommitEdit(DataGridViewDataErrorContexts.Commit);
}
protected override void OnCellValidating(DataGridViewCellValidatingEventArgs e)
{
// (our validation logic) ...
}
. 유효성 검사는 일반적으로 행을 나갈 때 발생합니다. 이렇게하면 하나의 '트랜잭션'에서 여러 변경 사항을 커밋 할 수 있습니다. 즉각적인 유효성 검사가 필요한 경우 데이터 양식을 만들고 거기서 원하는 모든 사용자 지정 유효성 검사를 수행하십시오. – Neolisk
그러나이 경우 행을 "입력"또는 "떠나는"개념이 없습니다. 콤보 상자와 관련 항목 만 있습니다. 콤보 상자에서 항목을 클릭 할뿐만 아니라 입력을 확인하기 위해 셀을 "끕니다"를 클릭해야한다는 것이 이상하게 느껴집니다. 사용자가 선택하고 오류가 없으면 다른 사용자가 놀랄 수 있습니다. 그런 다음 다른 콤보 상자의 행을 클릭하고 _then_ 가져옵니다. 사용자가 항목을 클릭 할 때 편집을 커밋하고 끝낼 수 있다면,이 룩앤필과의 일관성을 위해 유효성을 검사하지 않는 것이 어떻겠습니까? –
'그냥 콤보 상자와 관련 항목이 있어요'이 부분을 설명해주세요. – Neolisk