在运行时期间将项添加到DataGridView中的DataGridViewComboBoxColumn

时间:2009-08-31 13:08:39

标签: c# winforms

我正在使用DataGridViewComboBoxColumn列创建DataGridView。最初,组合框项使用Items.Add(“sometext”)填充值。

在DataGridView的EditingControlShowing事件中返回的DataGridViewComboBoxEditingControl中添加了更多值。

此后我可以正确选择最初添加的值,但是如果我尝试选择一个稍后添加的消息“DataGridViewComboBoxCell值无效”的异常。扔了。

任何想法为什么?

2 个答案:

答案 0 :(得分:3)

您需要处理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中的所有其他行都具有该值。

答案 1 :(得分:0)

试试这个,

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

注意:将AllowUserToAddRows属性设置为false