【问题标题】:Adding ComboBox to a datagridview for a particular row将 ComboBox 添加到特定行的 datagridview
【发布时间】:2012-08-10 11:13:55
【问题描述】:

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

【问题讨论】:

  • 我认为标题所推断的不是解决此问题的正确方法。您可以将第一列设为 DataGridViewComboboxCell 并将其设置为某些行的只读,而不是尝试使列的单元格类型因行而异。

标签: c# winforms datagridview


【解决方案1】:

可以在运行时替换特定的 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;
}

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


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

【讨论】:

  • 似乎无法将 List 绑定为 DataGridViewComboBoxCell 的数据源?
【解决方案2】:

请考虑在 Form Designer 中使用网格的右键单击上下文菜单项Edit Columns...ComboBox 列添加到网格中.要添加列,需要单击 Edit Columns 对话框的 Add 按钮,然后选择 Type = DataGridViewComboBoxColumn,如下所示:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    相关资源
    最近更新 更多