/ / Validate DataGridViewComboBoxCell po zmianie użytkownika na nową wartość - c #, winformy, sprawdzanie poprawności, datagridview

Sprawdź poprawność DataGridViewComboBoxCell, gdy użytkownik zmieni nową wartość - c #, winformy, sprawdzanie poprawności, datagridview

Mamy kolumnę w naszym DataGridView, dla której użytkownik może wybrać wartość z combobox (DataGridViewComboBoxColumn). Mamy pewną logikę sprawdzania poprawności dla wyboru (nadpisujemy OnCellValidating).

To irytujące, że użytkownik musi kliknąćgdzie indziej po dokonaniu wyboru w polu złożonym, zanim nastąpi walidacja dla tej komórki. Próbowałem już zatwierdzić edycję, gdy tylko zmieni się wybrany indeks (patrz poniżej), ale sprawdzanie poprawności wciąż nie jest uruchamiane, dopóki komórka nie straci fokusa. EndEdit() zamiast CommitEdit().

Czy istnieje sposób na sprawdzenie poprawności, gdy użytkownik wybierze element w polu kombi?

    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) ...
}

Odpowiedzi:

0 dla odpowiedzi № 1

Możesz symulować klawisz tabulatora, aby zmusić komórkę do utraty ostrości:

    private void combo_SelectedIndexChanged(object sender, EventArgs e)
{
//I expect to get the validation to fire as soon as the user
//selects an item in the combo box but the validation
//is not firing until the cell loses focus
//simulate tab key to force the cell to lose focus
SendKeys.Send("{TAB}");
SendKeys.Send("+{TAB}");
}