Обработка событий вне класса - C#

Узнай цену своей работы

Формулировка задачи:

Здравствуйте. Помогите оценить и дополнить решение. Суть такая: есть 3-4 таблицы, с похожей структурой. В частности, в них есть колонки "IntervalFrom", "IntervalTo", т.е. записаны в них интервалы. 0-100 100-250 250-270 и т.д. Мне необходимо, чтобы при изменении цифры 100 в колонке "IntervalTo" (первая строка), менялась сразу и колонка "IntervalFrom" (вторая строка). Написан был обработчик событий в таком виде:
Листинг программы
  1. private void StratigraphyDataModuleIntervalChanged(object sender, DataColumnChangeEventArgs e)
  2. {
  3. if (e.Column.ColumnName == "IntervalFrom" && e.Row.RowState != DataRowState.Detached)
  4. {
  5. DataRow previousRow = DataSetHelper.GetPreviousRow(e.Row);
  6. if (previousRow != null)
  7. {
  8. stratigraphy.ColumnChanged -= StratigraphyDataModuleIntervalChanged;
  9. previousRow["IntervalTo"] = e.ProposedValue;
  10. stratigraphy.ColumnChanged += StratigraphyDataModuleIntervalChanged;
  11. }
  12. }
  13. if (e.Column.ColumnName == "IntervalTo" && e.Row.RowState != DataRowState.Detached)
  14. {
  15. DataRow nextRow = DataSetHelper.GetNextRow(e.Row);
  16. if (nextRow != null)
  17. {
  18. stratigraphy.ColumnChanged -= StratigraphyDataModuleIntervalChanged;
  19. nextRow["IntervalFrom"] = e.ProposedValue;
  20. stratigraphy.ColumnChanged += StratigraphyDataModuleIntervalChanged;
  21. }
  22. }
  23. }
stratigraphy - это DataTable. Т.е. можно сделать копипаст для остальных таблиц, но хотелось бы всё же сделать один класс, который бы обрабатывал события. В итоге я написал следующий класс:
Листинг программы
  1. public static class IntervalChange
  2. {
  3. public static void IntervalChanged(object sender, DataColumnChangeEventArgs e)
  4. {
  5. if (e.Column.ColumnName == "IntervalFrom" && e.Row.RowState != DataRowState.Detached)
  6. {
  7. DataRow previousRow = DataSetHelper.GetPreviousRow(e.Row);
  8. if (previousRow != null)
  9. {
  10. e.Row.Table.ColumnChanged -= IntervalChanged; // вот тут
  11. previousRow["IntervalTo"] = e.ProposedValue;
  12. e.Row.Table.ColumnChanged += IntervalChanged; // вот тут
  13. }
  14. }
  15. if (e.Column.ColumnName == "IntervalTo" && e.Row.RowState != DataRowState.Detached)
  16. {
  17. DataRow nextRow = DataSetHelper.GetNextRow(e.Row);
  18. if (nextRow != null)
  19. {
  20. e.Row.Table.ColumnChanged -= IntervalChanged;
  21. nextRow["IntervalFrom"] = e.ProposedValue;
  22. e.Row.Table.ColumnChanged += IntervalChanged;
  23. }
  24. }
  25. }
  26. }
А в классе, где обрабатывается исходная таблица добавил:
Листинг программы
  1. private void StratigraphyDataModuleIntervalChanged(object sender, DataColumnChangeEventArgs e)
  2. {
  3. IntervalChange.IntervalChanged(sender, e);
  4. }
Теперь при изменении следующей строки: previousRow["IntervalTo"] = e.ProposedValue происходит снова событие. От которого я безуспешно пытаюсь отписаться (см. комментарий в коде). Верно ли вообще моё решение со static классом, который бы обрабатывал события в похожих таблицах? Заранее спасибо!

Решение задачи: «Обработка событий вне класса»

textual
Листинг программы
  1. public static class IntervalChange

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

13   голосов , оценка 3.923 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы