Добавить элементы в DataGridViewComboBoxColumn в DataGridView во время выполнения - PullRequest
1 голос
/ 31 августа 2009

Я создаю DataGridView со столбцом DataGridViewComboBoxColumn. Изначально поле со списком Items заполняется значениями с использованием Items.Add ("sometext").

Дополнительные значения добавляются в DataGridViewComboBoxEditingControl, возвращаемый в событии EditingControlShowing DataGridView.

В дальнейшем я могу правильно выбрать добавленные значения изначально, но если я попытаюсь выбрать добавленное позже, возникнет исключение с сообщением «Значение DataGridViewComboBoxCell недопустимо» брошен.

Есть идеи почему?

Ответы [ 2 ]

3 голосов
/ 31 августа 2009

Вам нужно обработать событие ComboBoxValidating, а затем добавить его туда. Вот некоторый код:

    private void HandleEditShowing(
        object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        var cbo = e.Control as ComboBox;
        if (cbo == null)
        {
            return;
        }

        cbo.DropDownStyle = ComboBoxStyle.DropDown;
        cbo.Validating -= HandleComboBoxValidating;
        cbo.Validating += HandleComboBoxValidating;
    }

    private void HandleComboBoxValidating(object sender, CancelEventArgs e)
    {
        var combo = sender as DataGridViewComboBoxEditingControl;
        if (combo == null)
        {
            return;
        }
        //check if item is already in drop down, if not, add it to all
        if (!combo.Items.Contains(combo.Text))
        {
            var comboColumn = this.dataGridView1.Columns[
                this.dataGridView1.CurrentCell.ColumnIndex] as
                    DataGridViewComboBoxColumn;
            combo.Items.Add(combo.Text);
            comboColumn.Items.Add(combo.Text);
            this.dataGridView1.CurrentCell.Value = combo.Text;
        }
    }

Поэтому, когда вы обрабатываете событие EditingControlShowing, подключитесь к событию Validating в комбобоксе. Затем это событие сработает, как только пользователь введет какой-либо текст в поле со списком DataGridView и выложит из него вкладки. В этот момент вам необходимо добавить его в само поле со списком, а также в фактический DataGridViewColumn, чтобы все остальные строки в DataGridView имели это значение.

0 голосов
/ 26 июля 2012

Попробуйте это,

DataGridViewComboBoxColumn Column_ModemList = (DataGridViewComboBoxColumn)this.DGV_Groups.Columns["DGV_Groups_ModemList"];
Column_ModemList.Items.Add(l_modem_str);

Примечание. Установите для свойства AllowUserToAddRows значение false.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...