private void CellDoubleClicked(DataGridView dgv, DataGridViewCellEventArgs e)
        {
            TimetableSectionModelDataAdapter adapter = null;

            if (dgv == dgvDown)
            {
                Log.Trace("Down train double-clicked: grid coords {0}, {1}", e.ColumnIndex, e.RowIndex);
                adapter = _downTrainsAdapter;
            }
            else if (dgv == dgvUp)
            {
                Log.Trace("Up train double-clicked: grid coords {0}, {1}", e.ColumnIndex, e.RowIndex);
                adapter = _upTrainsAdapter;
            }
            if (adapter == null)
            {
                Log.Warn("Adapter not set!");
                return;
            }
            if (!adapter.IsColumnTrainColumn(e.ColumnIndex))
            {
                Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_ColumnIsNotATrainColumn, e.ColumnIndex);
                return;
            }
            string trainId = adapter.GetTrainIdForViewColumn(e.ColumnIndex);

            Log.Trace(CultureInfo.CurrentCulture, Resources.LogMessage_SelectedTrainId, trainId);
            if (string.IsNullOrWhiteSpace(trainId))
            {
                return;
            }

            EditTrain(trainId);
        }
 private void UpdateTrainEditingButtonsEnabled()
 {
     btnDel.Enabled = btnEdit.Enabled =
         (tcMain.SelectedTab == tabGraph && trainGraph.Model.SelectedTrain != null) ||
         (tcMain.SelectedTab == tabDown && dgvDown.SelectedCells.Count > 0 && _downTrainsAdapter.IsColumnTrainColumn(dgvDown.SelectedCells[0].ColumnIndex)) ||
         (tcMain.SelectedTab == tabUp && dgvUp.SelectedCells.Count > 0 && _upTrainsAdapter.IsColumnTrainColumn(dgvUp.SelectedCells[0].ColumnIndex)) ||
         (tcMain.SelectedTab == tabHours && dgvHours.SelectedCells.Count > 0);
     btnCopy.Enabled = btnReverse.Enabled = btnDel.Enabled && tcMain.SelectedTab != tabHours;
 }