void dgClearingTimespans_SelectionChanged(object sender, EventArgs e)
        {
            this.lnkIntradayInterruptsDelete.Enabled = false;
            if (this.settingValueManuallyIgnoringEvent)
            {
                return;
            }
            if (this.dgClearingTimespans.SelectedRows.Count == 0)
            {
                return;
            }
            MarketClearingTimespan closedHour = (MarketClearingTimespan)this.dgClearingTimespans.SelectedRows[0].Tag;

            if (closedHour == null)
            {
                return;
            }
            this.lnkIntradayInterruptsDelete.Enabled = true;
        }
        void dgClearingTimespans_CellValueChanged(object sender, DataGridViewCellEventArgs e)
        {
            if (this.settingValueManuallyIgnoringEvent)
            {
                return;
            }
            if (e.RowIndex < 0)
            {
                return;
            }
            if (e.ColumnIndex < 0)
            {
                return;
            }
            string errormsg   = "";
            string headerText = this.dgClearingTimespans.Columns[e.ColumnIndex].HeaderText;
            MarketClearingTimespan clearingTimespan = this.dgClearingTimespans.Rows[e.RowIndex].Tag as MarketClearingTimespan;

            if (clearingTimespan == null)
            {
                MessageBox.Show("Rows[" + e.RowIndex + "].Tag=null (expecting RegularClosedHour)", headerText);
                return;
            }
            DataGridViewCell cell = this.dgClearingTimespans[e.ColumnIndex, e.RowIndex];
            string           cellValueAsString = (cell.Value != null) ? cell.Value.ToString() : "";
            string           columnNameChanged = this.dgClearingTimespans.Columns[e.ColumnIndex].Name;

            this.settingValueManuallyIgnoringEvent = true;
            switch (columnNameChanged)
            {
            case "colClearingTimespansSuspends":
                try {
                    DateTime newTime = DateTime.Parse(cellValueAsString);
                    clearingTimespan.SuspendServerTimeOfDay = newTime;
                } catch (Exception ex) {
                    errormsg = columnNameChanged + ": cellValueAsString[" + cellValueAsString + "] " + ex.Message
                               + ", back to old value [" + clearingTimespan.SuspendServerTimeOfDayAsString + "]";
                }
                cell.Value = clearingTimespan.SuspendServerTimeOfDayAsString;
                break;

            case "colClearingTimespansResumes":
                try {
                    DateTime newTime = DateTime.Parse(cellValueAsString);
                    clearingTimespan.ResumeServerTimeOfDay = newTime;
                } catch (Exception ex) {
                    errormsg = columnNameChanged + ": cellValueAsString[" + cellValueAsString + "] " + ex.Message
                               + ", back to old value [" + clearingTimespan.ResumeServerTimeOfDayAsString + "]";
                }
                cell.Value = clearingTimespan.ResumeServerTimeOfDayAsString;
                break;

            case "colClearingTimespansDaysOfWeek":
                try {
                    List <DayOfWeek> dowsParsed = marketInfoRepository.parseDaysOfWeekCsv(cellValueAsString, ", ");
                    clearingTimespan.DaysOfWeekWhenClearingHappens = dowsParsed;
                } catch (Exception ex) {
                    errormsg = columnNameChanged + ": cellValueAsString[" + cellValueAsString + "] " + ex.Message
                               + ", back to old value [" + clearingTimespan.DaysOfWeekWhenClosingNotHappensAsString + "]";
                }
                cell.Value = clearingTimespan.DaysOfWeekWhenClosingNotHappensAsString;
                break;

            default:
                errormsg = "no handler for field:[" + columnNameChanged + "]";
                break;
            }
            this.settingValueManuallyIgnoringEvent = false;
            if (string.IsNullOrEmpty(errormsg) == false)
            {
                MessageBox.Show(errormsg, headerText);
            }
            this.marketInfoRepository.Serialize();
        }