public override void setDataGridViewAdmin(DateTime date) { int offset = -1 , nextIndx = -1; string strFmtDatetime = string.Empty; switch (modeGetRDGValues) { case MODE_GET_RDG_VALUES.DISPLAY: //??? не очень изящное решение if (IsHandleCreated /*InvokeRequired*/ == true) { m_evtAdminTableRowCount.Reset(); // кол-во строк может быть изменено(нормализовано) только в том потоке,в котором было выполнено создание элемента управления this.BeginInvoke(new DelegateFunc(normalizedTableHourRows)); //??? ожидать, пока не завершится выполнение предыдущего потока m_evtAdminTableRowCount.WaitOne(System.Threading.Timeout.Infinite); } else { Logging.Logg().Error(@"PanelTAdminKomDisp::setDataGridViewAdmin () - ... BeginInvoke (normalizedTableHourRows) - ...", Logging.INDEX_MESSAGE.D_001); } ((DataGridViewAdminKomDisp)this.dgwAdminTable).m_PBR_0 = m_admin.m_curRDGValues_PBR_0; //??? отобразить значения - почему не внутри класса-объекта представления for (int i = 0; i < m_admin.m_curRDGValues.Length; i++) { strFmtDatetime = m_admin.GetFmtDatetime(i); offset = m_admin.GetSeasonHourOffset(i + 1); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.DATE_HOUR].Value = date.AddHours(i + 1 - offset).ToString(strFmtDatetime); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.PLAN].Value = m_admin.m_curRDGValues[i].pbr.ToString("F2"); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.PLAN].ToolTipText = m_admin.m_curRDGValues[i].pbr_number; if (i > 0) { this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.UDGe].Value = (((m_admin.m_curRDGValues[i].pbr + m_admin.m_curRDGValues[i - 1].pbr) / 2) + m_admin.m_curRDGValues[i].recomendation).ToString("F2"); } else { this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.UDGe].Value = (((m_admin.m_curRDGValues[i].pbr + m_admin.m_curRDGValues_PBR_0) / 2) + m_admin.m_curRDGValues[i].recomendation).ToString("F2"); } this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.RECOMENDATION].Value = m_admin.m_curRDGValues[i].recomendation.ToString("F2"); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.RECOMENDATION].ToolTipText = m_admin.m_curRDGValues[i].dtRecUpdate.ToString(); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.FOREIGN_CMD].Value = m_admin.m_curRDGValues[i].fc.ToString(); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.DEVIATION_TYPE].Value = m_admin.m_curRDGValues[i].deviationPercent.ToString(); this.dgwAdminTable.Rows[i].Cells[(int)DataGridViewAdminKomDisp.DESC_INDEX.DEVIATION].Value = m_admin.m_curRDGValues[i].deviation.ToString("F2"); } //this.dgwAdminTable.Invalidate(); m_admin.CopyCurToPrevRDGValues(); break; case MODE_GET_RDG_VALUES.EXPORT: nextIndx = Admin.AddValueToExportRDGValues(m_admin.m_curRDGValues, date); if (nextIndx < 0) { Invoke(new Action(btnRefresh.PerformClick)); } else { Admin.GetRDGValues(nextIndx, mcldrDate.SelectionStart.Date); } break; default: break; } }
/// <summary> /// Отобразить значения в представлении /// </summary> /// <param name="date">Дата, за которую получены значения для отображения</param> /// <param name="bResult">Признак наличия новых значений, иначе требуется изменить оформление представления</param> public override void SetDataGridViewAdmin(DateTime date, bool bResult) { int offset = -1; FormChangeMode.KeyDevice nextKey; string strFmtDatetime = string.Empty; IAsyncResult iar; Action exportPBRValuesEnded = delegate() { ModeGetRDGValues = AdminTS.MODE_GET_RDG_VALUES.DISPLAY; btnRefresh.PerformClick(); }; if ((ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.DISPLAY) == AdminTS.MODE_GET_RDG_VALUES.DISPLAY) { if (bResult == true) { //??? не очень изящное решение if (IsHandleCreated == true) { if (InvokeRequired == true) { //m_evtAdminTableRowCount.Reset (); // кол-во строк может быть изменено(нормализовано) только в том потоке,в котором было выполнено создание элемента управления iar = this.BeginInvoke(new DelegateBoolFunc(normalizedTableHourRows), InvokeRequired); //??? ожидать, пока не завершится выполнение предыдущего потока //m_evtAdminTableRowCount.WaitOne (System.Threading.Timeout.Infinite); WaitHandle.WaitAny(new WaitHandle [] { iar.AsyncWaitHandle }, System.Threading.Timeout.Infinite); this.EndInvoke(iar); } else { normalizedTableHourRows(InvokeRequired); } } else { normalizedTableHourRows(false); if (!((ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST) == AdminTS.MODE_GET_RDG_VALUES.UNIT_TEST)) { Logging.Logg().Error(@"PanelAdminKomDisp::setDataGridViewAdmin () - ... BeginInvoke (normalizedTableHourRows) - ...", Logging.INDEX_MESSAGE.D_001); } else { ; } } ((DataGridViewAdminKomDisp)this.dgwAdminTable).m_PBR_0 = m_admin.m_curRDGValues_PBR_0; //??? отобразить значения - почему не внутри класса-объекта представления for (int i = 0; i < m_admin.m_curRDGValues.Length; i++) { strFmtDatetime = m_admin.GetFmtDatetime(i); offset = m_admin.GetSeasonHourOffset(i + 1); this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DATE_HOUR].Value = date.AddHours(i + 1 - offset).ToString(strFmtDatetime); //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DATE_HOUR].Style.BackColor = this.dgwAdminTable.BackColor; this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.PLAN].Value = m_admin.m_curRDGValues [i].pbr.ToString("F2"); this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.PLAN].ToolTipText = m_admin.m_curRDGValues [i].pbr_number; //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.PLAN].Style.BackColor = this.dgwAdminTable.BackColor; if (i > 0) { this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.UDGe].Value = (((m_admin.m_curRDGValues [i].pbr + m_admin.m_curRDGValues [i - 1].pbr) / 2) + m_admin.m_curRDGValues [i].recomendation).ToString("F2"); } else { this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.UDGe].Value = (((m_admin.m_curRDGValues [i].pbr + m_admin.m_curRDGValues_PBR_0) / 2) + m_admin.m_curRDGValues [i].recomendation).ToString("F2"); } //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.UDGe].Style.BackColor = this.dgwAdminTable.BackColor; this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.RECOMENDATION].Value = m_admin.m_curRDGValues [i].recomendation.ToString("F2"); this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.RECOMENDATION].ToolTipText = m_admin.m_curRDGValues [i].dtRecUpdate.ToString(); //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.RECOMENDATION].Style.BackColor = this.dgwAdminTable.BackColor; this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.FOREIGN_CMD].Value = m_admin.m_curRDGValues [i].fc.ToString(); //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.FOREIGN_CMD].Style.BackColor = this.dgwAdminTable.BackColor; this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DEVIATION_TYPE].Value = m_admin.m_curRDGValues [i].deviationPercent.ToString(); //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DEVIATION_TYPE].Style.BackColor = this.dgwAdminTable.BackColor; this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DEVIATION].Value = m_admin.m_curRDGValues [i].deviation.ToString("F2"); //this.dgwAdminTable.Rows [i].Cells [(int)DataGridViewAdminKomDisp.COLUMN_INDEX.DEVIATION].Style.BackColor = this.dgwAdminTable.BackColor; } m_admin.CopyCurToPrevRDGValues(); } else { ; } } else if ((ModeGetRDGValues & AdminTS.MODE_GET_RDG_VALUES.EXPORT) == AdminTS.MODE_GET_RDG_VALUES.EXPORT) { nextKey = bResult == true ? Admin.AddValueToExportRDGValues(m_admin.m_curRDGValues, date) : new FormChangeMode.KeyDevice(); if (!(nextKey.Id > 0)) { if (InvokeRequired == true) { Invoke((MethodInvoker) delegate() { exportPBRValuesEnded(); }); } else { exportPBRValuesEnded(); } } else { Admin.GetRDGValues(nextKey, date); } } // сообщить в модульный тест о завершении очередной итерации EventUnitTestSetDataGridViewAdminCompleted?.Invoke(); }