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

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

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

Здравствуйте. Помогите оценить и дополнить решение. Суть такая: есть 3-4 таблицы, с похожей структурой. В частности, в них есть колонки "IntervalFrom", "IntervalTo", т.е. записаны в них интервалы. 0-100 100-250 250-270 и т.д. Мне необходимо, чтобы при изменении цифры 100 в колонке "IntervalTo" (первая строка), менялась сразу и колонка "IntervalFrom" (вторая строка). Написан был обработчик событий в таком виде:
        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;
                }
            }
        }
stratigraphy - это DataTable. Т.е. можно сделать копипаст для остальных таблиц, но хотелось бы всё же сделать один класс, который бы обрабатывал события. В итоге я написал следующий класс:
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);
        }
Теперь при изменении следующей строки: previousRow["IntervalTo"] = e.ProposedValue происходит снова событие. От которого я безуспешно пытаюсь отписаться (см. комментарий в коде). Верно ли вообще моё решение со static классом, который бы обрабатывал события в похожих таблицах? Заранее спасибо!

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

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

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


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

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

13   голосов , оценка 3.923 из 5
Похожие ответы