Как остановить проверку ячейки при нажатии кнопки отмены в UltraGrid

В моей UltraGrid у меня есть столбец с Nullable = Disallow, что означает, что поле не может быть пустым. Если я пытаюсь отредактировать свой столбец в пустую строку, мое событие CellDataError вызывается, как я и ожидал. Затем, однако, я хочу нажать Отмена во всем моем диалоговом окне (ячейка все еще пуста), и это снова запускает проверку.

Как я могу пропустить проверку при нажатии кнопки отмены?

1 ответ

Решение

Чтобы пропустить проверку, необходимо разрешить обнуляемые значения при нажатии кнопки отмены, а затем снова запретить обнуляемые значения при обновлении ячейки. Вот как вы можете добиться этого с помощью кода.

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        this.ultraGrid1.DataSource = InitializeGridSource();
        this.ultraGrid1.DisplayLayout.Bands[0].Columns[0].Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
        this.ultraGrid1.AfterCellUpdate += new CellEventHandler(ultraGrid1_AfterCellUpdate);
        this.Deactivate += new EventHandler(Form1_Deactivate);
    }

    private void ultraGrid1_AfterCellUpdate(object sender, Infragistics.Win.UltraWinGrid.CellEventArgs e)
    {
        this.ultraGrid1.ActiveCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Disallow;
    }

    private void Form1_Deactivate(object sender, EventArgs e)
    {
        if (this.OwnedForms.Length > 0 && this.OwnedForms[0].Text == "Data Error")
        {
            this.OwnedForms[0].FormClosing += new FormClosingEventHandler(Form1_FormClosing);
        }
    }

    private void Form1_FormClosing(object sender, FormClosingEventArgs e)
    {
        if ((sender as Form).DialogResult == System.Windows.Forms.DialogResult.Cancel)
        {
            var activeCell = this.ultraGrid1.ActiveCell;
            activeCell.Column.Nullable = Infragistics.Win.UltraWinGrid.Nullable.Automatic;
            activeCell.EditorResolved.ExitEditMode(forceExit: true, applyChanges: true);
            this.ultraGrid1.UpdateData();     
        }
    }

    private DataTable InitializeGridSource(int rows = 7)
    {
        DataTable newTable = new DataTable("Table1");

        newTable.Columns.Add("String Column", typeof(string));

        for (int index = 0; index < rows; index++)
        {
            newTable.Rows.Add(new object[] { "Text " + index });
        }

        return newTable;
    }
}
Другие вопросы по тегам