private void LoadDataSub(int measureId, int sensorId) { var keyDbName = DBManagerChild.GetDBName(sensorId); DateTime?dtS = null; DateTime?dtE = null; if (pnlFilter.Visible == true) { dtS = new DateTime(dtpSubDateS.Value.Year, dtpSubDateS.Value.Month, dtpSubDateS.Value.Day, (int)cboSubHourS.SelectedValue, (int)cboSubMimuteS.SelectedValue, (int)cboSubSecondS.SelectedValue, 000); dtE = new DateTime(dtpSubDateE.Value.Year, dtpSubDateE.Value.Month, dtpSubDateE.Value.Day, (int)cboSubHourE.SelectedValue, (int)cboSubMimuteE.SelectedValue, (int)cboSubSecondE.SelectedValue, 999); } dgvMeasureDetail.DataSource = AppManager.GetDBChildConnection(keyDbName).GetMeasureDetail(measureId.ToString(), chkView.Checked, dtS, dtE); if (dgvMeasureDetail.Rows.Count > 0) { dgvMeasureDetail.FirstDisplayedScrollingRowIndex = dgvMeasureDetail.Rows.Count - 1; dgvMeasureDetail.Rows[dgvMeasureDetail.Rows.Count - 1].Selected = true; } }
private void dgvMeasure_SelectionChanged(object sender, EventArgs e) { if (IsLoading) { return; } if (dgvMeasure.CurrentRow == null || dgvMeasure.CurrentRow.Index < 0) { return; } dgvMeasureDetail.DataSource = null; this.Cursor = Cursors.WaitCursor; DGVMeasureInfo item = dgvMeasure.CurrentRow.DataBoundItem as DGVMeasureInfo; var keyDbName = DBManagerChild.GetDBName(item.SensorId); var lst = AppManager.GetDBChildConnection(keyDbName).GetMeasureDetail(item.MeasureId.ToString(), true); int cnt = 1; lst = lst.Select(i => { i.No = cnt++; return(i); }).ToList(); dgvMeasureDetail.DataSource = lst; //if (dgvMeasureDetail.Rows.Count > 0) //{ // dgvMeasureDetail.Select(); // dgvMeasureDetail.FirstDisplayedScrollingRowIndex = 0; // dgvMeasureDetail.Rows[0].Selected = true; //} this.Cursor = Cursors.Default; }
public static void Configure() { if (!_hasConfigure) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.ApplicationExit += (sender, e) => { //foreach (var dbChild in _dbChildContainer) //{ // if (dbChild.Value != null) // { // dbChild.Value.Dispose(); // } //} //_dbChildContainer.Clear(); //_dbChildContainer = null; }; // Config DB SQLiteManager.CreateDatabaseIfNotExists(_pathDB); using (var objDB = AppManager.GetConnection()) { var defValues = GetDefaultSetting(); objDB.SetDefaultValues(defValues); } using (var objDB = AppManager.GetConnection()) { ListBlock = objDB.GetListBlock(); ListSensor = objDB.GetListSensor(); } ListSensor.Select((sensor) => { var pathDBSensor = PathFolderData + DBManagerChild.GetDBName(sensor.SensorId); SQLiteManager.CreateDatabaseIfNotExists2(pathDBSensor); GetDBChildConnection(DBManagerChild.GetDBName(sensor.SensorId)); return(sensor); }).ToList(); //foreach (var sensor in ListSensor) //{ // var pathDBSensor = PathFolderData + DBManagerChild.GetDBName(sensor.SensorId); // SQLiteManager.CreateDatabaseIfNotExists2(pathDBSensor); // GetDBChildConnection(DBManagerChild.GetDBName(sensor.SensorId)); //} // Config Log // Config Language LanguageHelper.LoadConfigDefaultLanguage(); _hasConfigure = true; } }
private void UpdateMesureEndForSensor(object sender) { var obj = (QueueProcessorThread <List <MeasureDetail> >)sender; var sensorId = ConvertHelper.CnvNullToInt(obj.Name); if (sensorId > 0) { var measureResult = ListSensorChild.Where(i => i.SensorId == sensorId).Select(i => i.Result_Measure).FirstOrDefault() == (int)clsConst.emMeasureResult.Fail ? (int)clsConst.emMeasureResult.Fail : (int)clsConst.emMeasureResult.Pass; AppManager.GetDBChildConnection(DBManagerChild.GetDBName(sensorId)).UpdateEndTimeMeasure(mappingSensorMeasureId[sensorId], DateTime.Now, measureResult); Console.WriteLine("End sensor: " + DBManagerChild.GetDBName(sensorId)); } }
private void InsertMesureForSensor() { foreach (var sensor in this.ListSensorChild) { var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); mappingSensorMeasureId.Add(sensor.SensorId, AppManager.GetDBChildConnection(keyDbName).InsertMeasure(sensor)); mappingSensorMeasureData.Add(sensor.SensorId, new List <MeasureDetail>()); mappingSensorProcessorInsert.Add(sensor.SensorId, new QueueProcessorThread <List <MeasureDetail> >() { Name = sensor.SensorId.ToString(), }); mappingSensorProcessorInsert[sensor.SensorId].ProcessItem += InsertMesureDetailForSensor; mappingSensorProcessorInsert[sensor.SensorId].ProcessQueueEnd += UpdateMesureEndForSensor; mappingSensorProcessorInsert[sensor.SensorId].Start(); mappingSensorProcessorException.Add(sensor.SensorId, new QueueProcessorThread <DSF602Exception>() { Name = sensor.SensorId.ToString(), }); mappingSensorProcessorException[sensor.SensorId].ProcessItem += ExceptionForSensor; mappingSensorProcessorException[sensor.SensorId].Start(); } }
private void dgvMeasure_SelectionChanged(object sender, EventArgs e) { if (dgvMeasure.CurrentRow == null || dgvMeasure.CurrentRow.Index < 0) { return; } int rowIndex = dgvMeasure.CurrentRow.Index; int colIndex = dgvMeasure.CurrentCell.ColumnIndex; var measureid = ConvertHelper.CnvNullToInt(dgvMeasure.Rows[rowIndex].Cells[MeasureID.Index].Value); var sensorid = ConvertHelper.CnvNullToInt(dgvMeasure.Rows[rowIndex].Cells[SensorID.Index].Value); this.SetModeWaiting(); try { if (colIndex == dgvMeasure.Columns[colDelete.Index].Index) { // Delete if (!clsCommon.ComfirmMsg("MSG_COMFIRM_DELETE")) { ClearSelectionDgv(dgvMeasure); return; } var keyDbName = DBManagerChild.GetDBName(sensorid); var measureOfSensor = AppManager.GetDBChildConnection(keyDbName) .DeleteMeasure(measureid); LoadData(); } else { // Load filter var dtStartTime = CnvDBToDateTimePickerValue(dgvMeasure.Rows[rowIndex].Cells[StartTime.Index].Value); var dtEndTime = CnvDBToDateTimePickerValue(dgvMeasure.Rows[rowIndex].Cells[EndTime.Index].Value); var intMeasureType = ConvertHelper.CnvNullToInt(dgvMeasure.Rows[rowIndex].Cells[MeasureType.Index].Value); ResultDetail.Visible = intMeasureType == (int)emMeasureType.AlarmTest; pnlFilter.Enabled = true; dtpSubDateS.Value = dtStartTime; cboSubHourS.SelectedValue = dtStartTime.Hour; cboSubMimuteS.SelectedValue = dtStartTime.Minute; cboSubSecondS.SelectedValue = dtStartTime.Second; dtpSubDateE.Value = dtEndTime; cboSubHourE.SelectedValue = dtEndTime.Hour; cboSubMimuteE.SelectedValue = dtEndTime.Minute; cboSubSecondE.SelectedValue = dtEndTime.Second; LoadDataSub(measureid, sensorid); } } catch (Exception ex) { ShowMsg(MessageBoxIcon.Error, LanguageHelper.GetValueOf("MSG_ERR_PROCESS")); } finally { this.SetModeWaiting(false); } }
private void LoadData() { var dtStart = new DateTime(dtpStart.Value.Year, dtpStart.Value.Month, dtpStart.Value.Day, 0, 0, 0); var dtEnd = new DateTime(dtpEnd.Value.Year, dtpEnd.Value.Month, dtpEnd.Value.Day, 23, 59, 59); var strSDate = dtStart.ToString(clsConst.cstrDateTimeFormatNoMiliSecond); var strEDate = dtEnd.ToString(clsConst.cstrDateTimeFormatNoMiliSecond); int intUser = cmbUser.SelectedValue != null?ConvertHelper.CnvNullToInt(cmbUser.SelectedValue) : SELECT_ALL; int intResult = cmbResult.SelectedValue != null?ConvertHelper.CnvNullToInt(cmbResult.SelectedValue) : SELECT_ALL; pnlFilter.Enabled = false; dgvMeasureDetail.DataSource = null; var lstAllSensor = AppManager.ListSensor; var lstBlock = AppManager.ListBlock; List <Measure> lstMeasure = new List <Measure>(); if ((int)cmbBlock.SelectedValue < 0) { //foreach (var sensor in lstAllSensor) //{ // var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); // var measureOfSensor = AppManager.GetDBChildConnection(keyDbName) // .GetAllMeasure(strSDate, strEDate, intUser, intResult); // lstMeasure = measureOfSensor.Concat(lstMeasure).ToList(); //} lstAllSensor.Select((sensor) => { var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); lstMeasure.AddRange(AppManager.GetDBChildConnection(keyDbName).GetAllMeasure(strSDate, strEDate, intUser, intResult)); return(sensor); }).ToList(); } else if ((int)cmbSensor.SelectedValue < 0) { //var lstSensorOfBlock = lstAllSensor.FindAll(i => i.OfBlock == (int)cmbBlock.SelectedValue); //foreach (var item in lstSensorOfBlock) //{ // var keyDbName = DBManagerChild.GetDBName(item.SensorId); // var measureOfSensor = AppManager.GetDBChildConnection(keyDbName) // .GetAllMeasure(strSDate, strEDate, intUser, intResult); // lstMeasure = measureOfSensor.Concat(lstMeasure).ToList(); //} lstAllSensor.Where(i => i.OfBlock == (int)cmbBlock.SelectedValue).Select((sensor) => { var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); lstMeasure.AddRange(AppManager.GetDBChildConnection(keyDbName).GetAllMeasure(strSDate, strEDate, intUser, intResult)); return(sensor); }).ToList(); } else { var keyDbName = DBManagerChild.GetDBName((int)cmbSensor.SelectedValue); lstMeasure.AddRange(AppManager.GetDBChildConnection(keyDbName).GetAllMeasure(strSDate, strEDate, intUser, intResult)); } var query = (from m in lstMeasure join u in _mUsers on m.UserId equals u.UserId join s in lstAllSensor on m.SensorId equals s.SensorId join b in lstBlock on s.OfBlock equals b.BlockId select new DGVMeasureInfo { MeasureId = m.MeasureId, SensorId = m.SensorId, Alarm_Value = m.Alarm_Value, FullName = u.UserName, SensorName = s.SensorName, BlockName = b.BlockName, Measure_Result = m.Measure_Result, Start_time = m.Start_time, End_time = m.End_time }).OrderBy(x => x.MeasureId).ToList(); dgvMeasure.DataSource = query; if (dgvMeasure.Rows.Count > 0) { dgvMeasure.Select(); dgvMeasure.FirstDisplayedScrollingRowIndex = dgvMeasure.Rows.Count - 1; dgvMeasure.Rows[dgvMeasure.Rows.Count - 1].Selected = true; } }
private void btnExport_Click(object sender, EventArgs e) { if (dgvMeasure.Rows.Count == 0) { ShowMsg(MessageBoxIcon.Warning, LanguageHelper.GetValueOf("MSG_WAR_DATA")); return; } if (dgvMeasure.CurrentCell == null) { ShowMsg(MessageBoxIcon.Warning, LanguageHelper.GetValueOf("MSG_WAR_EXCEL")); return; } var objMeasureS = dgvMeasure.CurrentRow.Cells[StartTime.Index].Value; var objMeasureE = dgvMeasure.CurrentRow.Cells[EndTime.Index].Value; var dtMeasureS = objMeasureS != null && objMeasureS != DBNull.Value ? (DateTime?)objMeasureS : null; var dtMeasureE = objMeasureE != null && objMeasureE != DBNull.Value ? (DateTime?)objMeasureE : null; var intSensorId = ConvertHelper.CnvNullToInt(dgvMeasure.CurrentRow.Cells[SensorID.Index].Value); var intMeasureType = ConvertHelper.CnvNullToInt(dgvMeasure.CurrentRow.Cells[MeasureType.Index].Value); var intAlarmValue = ConvertHelper.CnvNullToInt(dgvMeasure.CurrentRow.Cells[AlarmValue.Index].Value); var intResult = ConvertHelper.CnvNullToInt(dgvMeasure.CurrentRow.Cells[Result.Index].Value); var intMeasureId = ConvertHelper.CnvNullToInt(dgvMeasure.CurrentRow.Cells[MeasureID.Index].Value); var strUserName = ConvertHelper.CnvNullToString(dgvMeasure.CurrentRow.Cells[User.Index].Value); var strDeviceName = ConvertHelper.CnvNullToString(dgvMeasure.CurrentRow.Cells[SensorName.Index].Value); var emType = intMeasureType == (int)emMeasureType.AlarmTest ? emMeasureType.AlarmTest : emMeasureType.WalkingTest; var pathReport = Path.GetTempPath() + @"\" + DateTime.Now.ToString(cstrDateTimeFormatNoMiliSecond2) + "xlsx"; var fileNameReport = (intMeasureType == (int)emMeasureType.AlarmTest ? REPORT_NAME_ALARM : REPORT_NAME_WALKING); CultureInfo currentCulture = Thread.CurrentThread.CurrentCulture; fileNameReport = currentCulture + "_" + fileNameReport; var pathReportTemplate = AppManager.PathReportTemplate + fileNameReport; var cnn = 0; if (!File.Exists(pathReportTemplate)) { pathReportTemplate = AppManager.PathReportTemplate + REPORT_NAME_ALARM; //ShowMsg(MessageBoxIcon.Warning, LanguageHelper.GetValueOf("MSG_WAR_EXCELTEMPLATE")); //return; } var threadExport = new Thread(() => { this.SetModeWaiting(); try { using (var saveFileDialog = clsCommon.SaveExcelDialog(DateTime.Now.ToString(cstrDateTimeFormatNoMiliSecond2) + "_report")) { if (saveFileDialog.ShowDialog() != DialogResult.OK) { return; } File.Copy(pathReportTemplate, pathReport, true); using (var objExport = new clsExportReport(pathReport)) { // Header objExport.WriteMeasureInfo(new MeasureInfo { MeasureId = intMeasureId, UserName = strUserName, ReportDate = dtMeasureS, MeasureStart = dtMeasureS, MeasureEnd = dtMeasureE, MeasureType = emType, MeasureResult = clsCommon.MeasureResultDisplay(intResult), AlarmValue = intAlarmValue, DeviceName = strDeviceName }); // Detail var keyDbName = DBManagerChild.GetDBName(intSensorId); var dataDetail = AppManager.GetDBChildConnection(keyDbName).GetMeasureDetail(intMeasureId.ToString(), false, dtMeasureS, dtMeasureE); var rowStarDetail = (emType == emMeasureType.AlarmTest ? clsExportReport.ROW_START_ALARM : clsExportReport.ROW_START_WALKING); dataDetail.Select((measure) => { if (objExport.WriteMeasureDetail(rowStarDetail, new clsConst.MeasureDetailExport { No = ++cnn, Time = ConvertHelper.CnvStringToDateTimeNull(measure.Samples_time), Value = ConvertHelper.CnvNullToInt(measure.Actual_Value), Result = clsCommon.MeasureResultDisplay(measure.Detail_Result), }, emType)) { rowStarDetail++; } return(measure); }).ToList(); } File.Copy(pathReport, saveFileDialog.FileName, true); if (File.Exists(saveFileDialog.FileName)) { if (!ComfirmMsg(LanguageHelper.GetValueOf("MSG_COMFIRM_EXCEL"))) { return; } Process.Start(saveFileDialog.FileName); return; } else { ShowMsg(MessageBoxIcon.Error, LanguageHelper.GetValueOf("MSG_ERR_EXCEL"), Text); return; } } } catch (Exception ex) { Console.WriteLine("Error export to excel: " + ex.Message); } finally { this.SetModeWaiting(false); } }); threadExport.SetApartmentState(ApartmentState.STA); threadExport.Start(); }
private void HandleWhenReceiveDataFromBlock(object sender, string[] data) { if (!this.IsRunning) { return; } var blockData = AppManager.ListBlock.FirstOrDefault(i => i.BlockId == this.BlockData.BlockId); var lstSensorDB = AppManager.ListSensor.Where(i => i.OfBlock == this.BlockData.BlockId && i.Active == (int)clsConst.emBlockStatus.Active).ToList(); var maxLenght = 0; if (lstSensorDB != null && lstSensorDB.Count > 0) { maxLenght = lstSensorDB.Select(i => i.SensorName.Length).Max(); } foreach (var sensor in this.ListSensorChild) { //if (sensor.MeasureType == clsConst.MeasureMode_Decay && sensor.IsMeasuring == false) //{ // return; //} var sensorDB = lstSensorDB.FirstOrDefault(i => i.SensorId == sensor.SensorId); if (sensorDB == null) { continue; } var tempPoint = data[sensor.Ordinal_Display - 1]; if (data[sensor.Ordinal_Display - 1] == DSF602Const.ERR_DATA && ErrorsReceiveDataFromBlock != null) { mappingSensorProcessorException[sensor.SensorId].Add(new DSF602Exception("SensorError NaN", DSF602ExceptionStatusCode.SensorError)); tempPoint = "0"; sensor.Active = clsConst.NOT_ACTIVE; } //var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); //var randomTest = new Random(); var pointGraphTemp = ConvertHelper.CnvNullToFloat(tempPoint, 0); // + randomTest.Next(-500, 500); var rateConvert = tempPoint.Replace("-", "").Length <= 7 ? 1000 : 10000; int pointGraph = 0; if (Math.Abs(pointGraphTemp * rateConvert) > int.MaxValue) { if (rateConvert == 1000) { pointGraph = 2000; } else { pointGraph = 20000; } pointGraph = pointGraphTemp > 0 ? pointGraph : -pointGraph; } else { pointGraph = (int)(pointGraphTemp * rateConvert); } //Console.WriteLine(pointGraph); int alarmVal = sensorDB.MeasureType == clsConst.MeasureMode_Ion ? clsConst.IonAlarmValue : sensorDB.Alarm_Value; var objMeasureDetail = new MeasureDetail { SensorId = sensor.SensorId, MeasureId = mappingSensorMeasureId[sensor.SensorId], DBName = DBManagerChild.GetDBName(sensor.SensorId), Samples_time = DateTime.Now, Actual_Value = pointGraph, Detail_Result = Math.Abs(pointGraph) >= alarmVal ? (int)clsConst.emMeasureResult.Fail : (int)clsConst.emMeasureResult.Pass, }; if (sensor.MeasureType != clsConst.MeasureMode_Decay) { if (objMeasureDetail.Detail_Result == (int)clsConst.emMeasureResult.Fail) { sensor.Result_Measure = (int)clsConst.emMeasureResult.Fail; sensor.Alarm = true; } } if (resetAlarm) { sensor.Alarm = false; } //mappingSensorMeasureData[sensor.SensorId].Add(objMeasureDetail); if (sensor.MeasureType != clsConst.MeasureMode_Decay || sensor.MeasureState != clsConst.MeasureState.None) { mappingSensorMeasureData[sensor.SensorId].Add(objMeasureDetail); } if (sensor.MeasureType != clsConst.MeasureMode_Decay && mappingSensorMeasureData[sensor.SensorId].Count == BATCH_PROCESS_SQL) { mappingSensorProcessorInsert[sensor.SensorId].Add(mappingSensorMeasureData[sensor.SensorId].ToList()); mappingSensorMeasureData[sensor.SensorId].Clear(); } if (sensor.MeasureType == clsConst.MeasureMode_Decay && sensor.MeasureState != clsConst.MeasureState.None) { mappingSensorProcessorInsert[sensor.SensorId].Add(mappingSensorMeasureData[sensor.SensorId].ToList()); mappingSensorMeasureData[sensor.SensorId].Clear(); } //var checkBatchProcessSql = sensor.MeasureType == clsConst.MeasureMode_Decay && sensor.MeasureState != clsConst.MeasureState.None; //checkBatchProcessSql = checkBatchProcessSql ? checkBatchProcessSql : mappingSensorMeasureData[sensor.SensorId].Count == BATCH_PROCESS_SQL; //if (checkBatchProcessSql) //{ // mappingSensorProcessorInsert[sensor.SensorId].Add(mappingSensorMeasureData[sensor.SensorId].ToList()); // mappingSensorMeasureData[sensor.SensorId].Clear(); //} if (sensor.GraphData == null) { sensor.GraphData = new DataSource(); } int x = sensor.GraphData.Samples == null ? 0 : sensor.GraphData.Samples.Count; if (sensor.MeasureType != clsConst.MeasureMode_Decay || sensor.MeasureState != clsConst.MeasureState.None) { sensor.GraphData.AddPoint(x, pointGraph, DateTime.Now, (int)sensor.MeasureState); } if (HandleReceiveMeasureDetail != null) { sensorDB.GraphData = sensor.GraphData; sensorDB.GraphName = sensorDB.SensorName.PadRight(maxLenght + 1, ' '); //Task.Factory.StartNew(() => System.Threading.ThreadPool.QueueUserWorkItem(delegate { sensorDB.ActualValue = objMeasureDetail.Actual_Value; //if (sensorDB.OfBlock == 1 && sensorDB.SensorId == 2) //{ // Console.WriteLine(sensorDB.Active); //} HandleReceiveMeasureDetail(sensorDB, objMeasureDetail); }); } } lock (_syncObjAlarm) { resetAlarm = false; } }
public void GetData(int currentBlock = -1) { try { if (frmMain != null && blockidActive == -1) { blockidActive = frmMain.BlockActiceId; } cmbBlock.SelectedValue = currentBlock > -1 ? currentBlock : int.Parse("" + cmbBlock.SelectedValue); IsLoading = true; Cursor = Cursors.WaitCursor; dgvMeasure.DataSource = null; dgvMeasureDetail.DataSource = null; DateTime dtNow = DateTime.Now; var dtStart = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, 0, 0, 0); var dtEnd = new DateTime(dtNow.Year, dtNow.Month, dtNow.Day, 23, 59, 59); var strSDate = dtStart.ToString(clsConst.cstrDateTimeFormatNoMiliSecond); var strEDate = dtEnd.ToString(clsConst.cstrDateTimeFormatNoMiliSecond); List <MUser> _mUsers = new List <MUser>(); using (var objDB = AppManager.GetConnection()) { _mUsers = objDB.GetMUser(); } int blockSelected = int.Parse("" + cmbBlock.SelectedValue); int sensorSelected = int.Parse("" + cmbSensor.SelectedValue); var lstSen = new List <SensorInfo>(); List <Measure> lstMeasure = new List <Measure>(); if (cmbBlock.SelectedValue == null || int.Parse("" + cmbBlock.SelectedValue) == -1) { lstSen = lstAllSensor; } else { if (cmbSensor.SelectedValue == null || int.Parse("" + cmbSensor.SelectedValue) == -1) { lstSen = cmbSensor.DataSource as List <SensorInfo>; } else { lstSen.Add(cmbSensor.SelectedItem as SensorInfo); } } lstSen = lstSen.Where(i => i.SensorId != -1).ToList(); foreach (SensorInfo sensor in lstSen) { var keyDbName = DBManagerChild.GetDBName(sensor.SensorId); lstMeasure.AddRange(AppManager.GetDBChildConnection(keyDbName).GetAllMeasure(strSDate, strEDate, AppManager.UserLogin.UserId, 1)); } var cnt = 1; var lstFail = (from max in (lstMeasure.GroupBy(g => new { g.SensorId, g.Measure_Result }) .Select(grp => new { grp.Key.SensorId, grp.Key.Measure_Result, MeasureId = grp.Max(i => i.MeasureId) })).ToList() join sensor in lstSen on max.SensorId equals sensor.SensorId join bl in lstBlock on sensor.OfBlock equals bl.BlockId where (blockSelected == -1 || bl.BlockId == blockSelected) && (sensorSelected == -1 || sensor.SensorId == sensorSelected) select new DGVMeasureInfo { No = cnt++, MeasureId = max.MeasureId, BlockName = bl.BlockName, SensorId = max.SensorId, SensorName = sensor.SensorName, Alarm_Value = lstMeasure.FirstOrDefault(i => i.MeasureId == max.MeasureId).Alarm_Value, Measure_Result = max.Measure_Result, MeasureDisplay = clsCommon.MeasureResultDisplay(1), Start_time = lstMeasure.FirstOrDefault(i => i.MeasureId == max.MeasureId).Start_time, End_time = lstMeasure.FirstOrDefault(i => i.MeasureId == max.MeasureId).End_time }).ToList(); dgvMeasure.DataSource = lstFail; } finally { Cursor = Cursors.Default; IsLoading = false; if (dgvMeasure.Rows.Count > 0) { dgvMeasure.Select(); dgvMeasure.FirstDisplayedScrollingRowIndex = 0; dgvMeasure.Rows[0].Selected = true; } } }