Почему EditedFormattedValue и отображаемое значение не обновляются в этой ячейке ComboBox DataGridView? - PullRequest
0 голосов
/ 27 февраля 2019

У меня есть DataGridView с колонкой в ​​выпадающих списках.Эти комбинированные списки могут содержать число от 1-24.У меня есть 8 строк в DGV, и я хочу, чтобы любые две строки не имели одинакового номера, выбранного в выпадающем списке.Если измененный CB конфликтует с любым другим CB, я устанавливаю тот, который изменился, на предыдущее значение, сохраненное в «CorrectSlotSelections».Если изменение действительно и не имеет конфликтов, я обновляю значение, сохраненное в «CorrectSlotSelections».

Все это работает должным образом, однако значение, отображаемое на экране, не обновляется, если оно было признано недействительным, даже если я перезаписал неверное значение.После проверки DGV в режиме отладки я вижу, что я перезаписал значение, но свойство «EditedFormattedValue» по-прежнему показывает старое, неправильное значение.Как я могу изменить это, чтобы обновить пользовательский интерфейс, чтобы он отображал исправленное значение?

// This event handler manually raises the CellValueChanged event 
// by calling the CommitEdit method. 
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (this.ChannelConfigDataGridView.IsCurrentCellDirty)
    {
        // This fires the cell value changed handler below
        ChannelConfigDataGridView.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

private void ChannelConfigDataGridView_CellValueChanged(object sender, DataGridViewCellEventArgs e)
{
    DataGridViewComboBoxCell cb = (DataGridViewComboBoxCell)ChannelConfigDataGridView.Rows[e.RowIndex].Cells[2];
    if (cb.Value != null)
    {
        // Check all rows for a cell in column 3 that has the value that was just changed.
        List<DataGridViewRow> rowsWithDuplicateValue = ChannelConfigDataGridView.Rows.Cast<DataGridViewRow>().Where(x => (int)x.Cells[2].Value == (int)cb.Value).ToList();
        if (rowsWithDuplicateValue == null || rowsWithDuplicateValue.Count() == 0)
        {
            return;
        }

        // If more than one item with this value was found we must handle the duplicates.
        if (rowsWithDuplicateValue.Count() > 1)
        {
            ChannelConfigDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = CorrectSlotSelections[e.RowIndex];
        }
        // If only one was found update the correct slot selections.
        else if(rowsWithDuplicateValue.Count() == 1)
        {
            CorrectSlotSelections[e.RowIndex] = (int)cb.Value;
        }
        ChannelConfigDataGridView.Invalidate();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...