设置DataGridViewComboBox默认等于现有的DataGridView列

时间:2016-04-15 12:05:40

标签: c# datagridview datagridviewcombobox

我已将DataGridViewComboBox添加到绑定DataGridViewgrdBOOK),DataGridViewComboBox将替换第3列以允许用户选择。我很难将DataGridViewComboBox的默认值设置为等于第3列的值,因此如果值正确,则不需要用户选择。

我从net中删除了以下代码,但是我收到了错误消息:

  

DataGridViewComboBoxCell值无效。

我认为ComboBox单元格可以被视为普通DataGridView单元格,但是(请参阅下面的代码)在将字符串添加到ComboBox列时会生成错误?我已经在网上搜索了几天但没有任何作用,有什么建议吗?

    public void BOOK_COMBO2()       
        {
            DataGridViewComboBoxCell cb_cell = new DataGridViewComboBoxCell();
            DataGridViewComboBoxColumn cb_col = new DataGridViewComboBoxColumn();

            // Contract field
            cb_col.Items.AddRange("YEARLY", "MONTHLY", "");
            cb_col.FlatStyle = FlatStyle.Flat;
            cb_col.HeaderText = "newCONTRACT";
            cb_col.Width = 50;
            cb_col.ValueType = typeof(string);

            // Add ComboBox and test
            grdBOOK.Columns.Insert(5, cb_col);
            grdBOOK.Rows[14].Cells[4].Value = "zzz";        // No error adding string to normal dgv column
            grdBOOK.Rows[14].Cells[5].Value = "xxx";        // Error adding string to dgvcombobx column

            //copy old values to new combobox and set as default
            foreach (DataGridViewRow item in grdBOOK.Rows)
            {
                item.Cells[5].Value = item.Cells[3].Value;      
            }
            //hide original column
            grdBOOK.Columns[3].Visible = false;
        }

2 个答案:

答案 0 :(得分:0)

经过对网络的更多研究,使用ContextMenuStrip的恕我直言是实现这一目标的更好方法。链接hereContextMenuStrip有更好的方法,事件,属性等。我希望这有助于其他人寻找解决方案。

答案 1 :(得分:0)

  private void dataGridView1_DataError(object sender,
            DataGridViewDataErrorEventArgs e)
        {
            // If the data source raises an exception when a cell value is 
            // commited, display an error message.
            if (e.Exception != null &&
                e.Context == DataGridViewDataErrorContexts.Commit)
            {
                MessageBox.Show("");
            }
        }




private void Form1_Load(object sender, EventArgs e)
    { dataGridView1.DataError +=
                dataGridView1_DataError;}