Обработка событий вне класса - C#
Формулировка задачи:
Здравствуйте. Помогите оценить и дополнить решение.
Суть такая: есть 3-4 таблицы, с похожей структурой. В частности, в них есть колонки "IntervalFrom", "IntervalTo", т.е. записаны в них интервалы.
0-100
100-250
250-270 и т.д.
Мне необходимо, чтобы при изменении цифры 100 в колонке "IntervalTo" (первая строка), менялась сразу и колонка "IntervalFrom" (вторая строка).
Написан был обработчик событий в таком виде:
stratigraphy - это DataTable.
Т.е. можно сделать копипаст для остальных таблиц, но хотелось бы всё же сделать один класс, который бы обрабатывал события. В итоге я написал следующий класс:
А в классе, где обрабатывается исходная таблица добавил:
Теперь при изменении следующей строки: previousRow["IntervalTo"] = e.ProposedValue происходит снова событие.
От которого я безуспешно пытаюсь отписаться (см. комментарий в коде).
Верно ли вообще моё решение со static классом, который бы обрабатывал события в похожих таблицах?
Заранее спасибо!
Листинг программы
- private void StratigraphyDataModuleIntervalChanged(object sender, DataColumnChangeEventArgs e)
- {
- if (e.Column.ColumnName == "IntervalFrom" && e.Row.RowState != DataRowState.Detached)
- {
- DataRow previousRow = DataSetHelper.GetPreviousRow(e.Row);
- if (previousRow != null)
- {
- stratigraphy.ColumnChanged -= StratigraphyDataModuleIntervalChanged;
- previousRow["IntervalTo"] = e.ProposedValue;
- stratigraphy.ColumnChanged += StratigraphyDataModuleIntervalChanged;
- }
- }
- if (e.Column.ColumnName == "IntervalTo" && e.Row.RowState != DataRowState.Detached)
- {
- DataRow nextRow = DataSetHelper.GetNextRow(e.Row);
- if (nextRow != null)
- {
- stratigraphy.ColumnChanged -= StratigraphyDataModuleIntervalChanged;
- nextRow["IntervalFrom"] = e.ProposedValue;
- stratigraphy.ColumnChanged += StratigraphyDataModuleIntervalChanged;
- }
- }
- }
Листинг программы
- public static class IntervalChange
- {
- public static void IntervalChanged(object sender, DataColumnChangeEventArgs e)
- {
- if (e.Column.ColumnName == "IntervalFrom" && e.Row.RowState != DataRowState.Detached)
- {
- DataRow previousRow = DataSetHelper.GetPreviousRow(e.Row);
- if (previousRow != null)
- {
- e.Row.Table.ColumnChanged -= IntervalChanged; // вот тут
- previousRow["IntervalTo"] = e.ProposedValue;
- e.Row.Table.ColumnChanged += IntervalChanged; // вот тут
- }
- }
- if (e.Column.ColumnName == "IntervalTo" && e.Row.RowState != DataRowState.Detached)
- {
- DataRow nextRow = DataSetHelper.GetNextRow(e.Row);
- if (nextRow != null)
- {
- e.Row.Table.ColumnChanged -= IntervalChanged;
- nextRow["IntervalFrom"] = e.ProposedValue;
- e.Row.Table.ColumnChanged += IntervalChanged;
- }
- }
- }
- }
Листинг программы
- private void StratigraphyDataModuleIntervalChanged(object sender, DataColumnChangeEventArgs e)
- {
- IntervalChange.IntervalChanged(sender, e);
- }
Решение задачи: «Обработка событий вне класса»
textual
Листинг программы
- public static class IntervalChange
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д