2015-03-26 2 views
1

У меня есть datagridview и combobox в моей winform. Данные gridview изменяются в зависимости от того, что выбрано в combobox. Данные могут быть вставлены и удалены (путем проверки столбца combobox) в сетке в базу данных. Если пользователь хочет добавить/удалить данные и забыть, чтобы нажать «Сохранить», я хочу пригласить пользователя, хотят ли они сохранить или нет. Моя сохраненная функция сохраняет, если были сделаны изменения.Запрос на сохранение при изменении значения comboBox

Вот что я пробовал:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo); 
      if (result == System.Windows.Forms.DialogResult.Yes) 
      { 

       Save(false); 
      } 
} 

Однако, делая это подскажет пользователю, когда форма загружается вверх. (Поскольку это значение по умолчанию в выпадающем списке)

private void comboBox1_SelectionChange(object sender, EventArgs e) 
     { 

      var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo); 
      if (result == System.Windows.Forms.DialogResult.Yes) 
      { 

       Save(false); 
      } 

     } 

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

Должен ли я отслеживать изменения comboBox как-то и сохранять предыдущий, и если да, то как?

ответ

0

Вы можете использовать логическое значение флага, чтобы указать, что уже загружена ваша форма и предотвратить ваш код в обработчик события от запуска до того, что:

private bool _loaded = false; 

Я обычно переворачивать булев флаг в пределах HandleCreated обработчик событий.

void MainForm_HandleCreated(object sender, EventArgs e) 
{ 
    _loaded = true; 
} 

Wire его на нагрузке:

private void MainForm_Load(object sender, EventArgs e) 
{ 
    HandleCreated += MainForm_HandleCreated; 
} 

Затем вы можете изменить обработчик окна со списком к этому:

private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    if(_loaded) 
    { 
     var result = MessageBox.Show("Do you want to save your changes?", "Save", MessageBoxButtons.YesNo); 
     if (result == System.Windows.Forms.DialogResult.Yes) 
     { 

      Save(false); 
     } 
    } 
} 

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

+0

Не могли бы вы привести пример этого, пожалуйста? –

+0

Потерпи меня, я работаю. Я нахожусь в поезде, так что это немного медленно. –

+0

Не беспокойтесь, просто любопытно, как вы это сделаете, поскольку я часто сталкиваюсь с этим –

Смежные вопросы