Распознать несохраненные изменения и уведомить пользователя - PullRequest
1 голос
/ 25 марта 2011

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

Код, который у меня есть, находится ниже, но он не распознает изменения.Он просто возвращается прямо в главное меню.

private void btnBack_Click(object sender, EventArgs e)
    {
        frmMenu frmMainMenu = new frmMenu();

        if (dsOrders.HasChanges())
        {


            if (DialogResult.Yes == MessageBox.Show("There are changes that have not been saved and will be lost. Would you like to save them before leaving this form?", "Unsaved Changes", MessageBoxButtons.YesNo))
            {
                dsOrders.AcceptChanges();
            }
            else
            {
                frmOrders.ActiveForm.Hide();

                frmMainMenu.Show();
            }

        }
        else
        {
            frmOrders.ActiveForm.Hide();

            frmMainMenu.Show();
        }

    }

Ответы [ 2 ]

2 голосов
/ 25 марта 2011

Один из способов сделать это - использовать событие Changed отдельных элементов управления и установить грязный бит

например

    public bool Dirty { get; set; }


    private void textBox1_TextChanged(object sender, EventArgs e)
    {
          Dirty = true;
    }

, а затем

        if (Dirty)
        {


            if (DialogResult.Yes == MessageBox.Show("There are changes that have not been saved and will be lost. Would you like to save them before leaving this form?", "Unsaved Changes", MessageBoxButtons.YesNo))
            {
                dsOrders.AcceptChanges();
            }
            else
            {
                frmOrders.ActiveForm.Hide();

                frmMainMenu.Show();
            }

        }
2 голосов
/ 25 марта 2011

Я предполагаю, что вы используете DataBinding, а dsOrders - это набор данных.

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

Затем вы можете отредактировать некоторые данные, и когда сработает точка останова, проверьте, есть ли изменения в наборе данных.Если это не так, метод HasChanges вернет false, и вы не получите окно сообщения.

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

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