Запрет DataGridView от автоматической фиксации изменений в объекте с привязкой к данным - PullRequest
0 голосов
/ 20 мая 2009

Мой DataGridView «полезен» благодаря автоматическому обновлению базового объекта в источнике данных при редактировании ячейки. Я хочу предотвратить это и выполнить обновление самостоятельно (чтобы я мог выполнить обновление таким образом, чтобы оно было зарегистрировано в нашем специальном менеджере отмены).

Я предполагал, что способ сделать это - обработать событие CellValueChanged, но базовый объект уже был обновлен при вызове обработчика события.

Есть ли правильный способ предотвратить это в DataGridView? Возможно, есть какое-то конкретное событие, с которым я могу справиться.

Ответы [ 2 ]

2 голосов
/ 20 мая 2009

Это не отвечает на ваш вопрос, однако я, вероятно, посоветовал бы вам спроектировать ваш объект таким образом, чтобы он вызывал событие до (или после) изменения значения, чтобы ваш «менеджер отмены» мог быть уведомлен , Таким образом, ваша логика не привязана к сетке. Если в будущем вы будете использовать этот объект с чем-то другим, вы также можете уведомить других об изменении значения. Мои $ 0,02

Пример кода:

public class SomeClass
{
    private int myInt;
    public event EventHandler MyIntChanging;
    public event EventHandler MyIntChanged;

    protected void OnMyIntChanging()
    {
        var handler = this.MyIntChanging;
        if (handler != null)
        {
            this.MyIntChanging(this, new EventArgs());
        }
    }

    protected void OnMyIntChanged()
    {
        var handler = this.MyIntChanged;
        if (handler != null)
        {
            this.MyIntChanged(this, new EventArgs());
        }
    }

    public int MyInt
    {
        get
        {
            return this.myInt;
        }
        set
        {
            if (this.myInt != value)
            {
                this.OnMyIntChanging();
                this.myInt = value;
                this.OnMyIntChanged();
            }

        }
    }
}
0 голосов
/ 20 мая 2009

Я полностью согласен с предложением BFree. Если вы не хотите следовать этим путем, используйте событие Datagridview.CellValidating , которое происходит до записи данных в базовый объект и даже позволяет отменить операцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...