Получите новое значение или индекс с помощью SelectionChangeCommitted Событие DataGridView Combobox - PullRequest
0 голосов
/ 11 ноября 2011

я использую SelectionChangeCommitted, чтобы поймать событие, когда индекс выбранного выпадающего списка изменился, но я не могу получить его новое значение или индекс.

private void ruleList_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        if (e.Control is ComboBox)
        {
            ComboBox comboBox = e.Control as ComboBox;
            comboBox.SelectionChangeCommitted += ruleListColumnComboSelectionChanged;
        }
    }

    private void ruleListColumnComboSelectionChanged(object sender, EventArgs e)
    {
        string value = ruleList.CurrentCell.Value.ToString(); // just return the old value before the change
    }

Ответы [ 4 ]

1 голос
/ 11 ноября 2011

Здравствуйте, попробуйте использовать ключевое слово CommitEdit (CommitEdit, также есть пример на странице MSDN). Добавьте это к вашему DataGridView:

// This event handler manually raises the CellValueChanged event
// by calling the CommitEdit method.
void dataGridView1_CurrentCellDirtyStateChanged(object sender,
    EventArgs e)
{
    if (dataGridView1.IsCurrentCellDirty)
    {
        dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    }
}

Тогда вы можете просто прослушать CellValueChanged и избежать необходимости регистрировать событие ComboBoxValueChanged в базовом элементе редактирования.

1 голос
/ 16 декабря 2011

Вы можете получить новое значение, используя:

ComboBox comboBox = sender.Control as ComboBox;
MessageBox.Show(comboBox.Text);
0 голосов
/ 17 марта 2012

Улучшение метода Killercam , вы можете проверить текущую ячейку как datagridviewcomboboxcell и сделать (в VB, который вы можете легко преобразовать в C #)

If TypeOf CType(sender, DataGridView).CurrentCell Is DataGridViewComboBoxCell Then
    CType(sender, DataGridView).CommitEdit(DataGridViewDataErrorContexts.Commit)
    CType(sender, DataGridView).EndEdit()
End If

Я также добавил EndEdit () метод для полноты.

0 голосов
/ 11 ноября 2011

Если я правильно понимаю, вы реагируете на событие SelectionChangeCommitted из выпадающего списка, но пытаетесь получить значение через сетку. Это правильно?

  • Как выполняется обязательство в списке правил?
  • Обязательство уже произошло в тот момент?

Мне кажется, что с помощью этого события SelectionChangeCommitted вы можете получить доступ к значению прямо из комбинированного списка, но еще не через сетку, поскольку оно еще не зафиксировано.

...