将ComboBox添加到特定行的datagridview

时间:2012-08-10 11:13:55

标签: c# winforms datagridview

我要求将下拉列表显示为多行中的一个特定行。 我的dataGridView有2列(参数和值),我在代码中动态添加3行。对于所有3行,参数文本是固定的,用户不能修改。对于第一行,参数文本为“prm1”,将从下拉列表中选择值文本。其他2行,Value文本将是User输入的文本框。我试过搜索但找不到答案。请帮帮我。

2 个答案:

答案 0 :(得分:4)

可以在运行时替换特定的DataGridView单元格 - 在您的情况下,例如,您希望在一个单元格中组合框,您可以拥有DataGridViewTextBoxColumn并替换第一行中的单元格。像这样:

void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
    List<Book> books = new List<Book>();
    books.Add(new Book { bookID = 1, bookName = "Test-Driven Development (Kent Beck)" });
    books.Add(new Book { bookID = 2, bookName = "Refactoring (Martin Fowler)" });
    books.Add(new Book { bookID = 3, bookName = "Code Complete: 2nd Edition (Steve McConnell)" });
    DataGridViewComboBoxCell c = new DataGridViewComboBoxCell();

    c.DataSource = books;
    c.Value = 1;
    c.ValueMember = "bookID";
    c.DisplayMember = "bookName";

    dataGridView1.Rows[0].Cells[0] = c;
}

您也可以通过其他方式执行此操作,并使用DataGridViewTextBoxCell从DataGridViewComboBoxColumn替换特定的组合框单元格。


但有一件事 - 虽然这会有效,但更好的可用性可能只是将一些组合框设置为只读。

答案 1 :(得分:2)

请考虑将 ComboBox 列添加到网格,并在表单设计器中右键单击上下文菜单项编辑列... 。要添加列,需要点击修改列对话框的添加按钮,然后选择 Type = DataGridViewComboBoxColumn,如下所示:

enter image description here

请注意:您还需要使用该列的ItemsDataSource属性来填充ComboBox的下拉列表。