0

我正在使用 MySQL .net 连接器来填充 Datagridview 使用MysqladapterDatagridview.Bindingsource。这很好用,但我想改变一件事:

在填充到 DataGridview 的表中,有一个文本类型的列。此列中的单元格在Datagridviewtextboxcelldatagridview 中显示为 a,但我想将其更改为DataGridviewComboboxCell(用户应在 ~10 个项目之间进行选择)。

我已经尝试了很多,但没有任何效果。DataGridview 中的 Columns 是只读的,我无法更改DefaultCellTemplate为 a DataGridviewComboboxCell,因为它不继承DataGridviewTextboxcell

我也试过这个:Gridview - 将 textboxcell 转换为 comboboxcell 并返回,我认为我的问题可以通过这种方式解决,但是使用这个解决方案我也有 1 个问题:它不显示下拉按钮。

任何帮助将不胜感激。

4

2 回答 2

1

在您链接的答案中,在该行之前:

dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] = cb;

尝试添加:

cb.DisplayStyle = DataGridViewComboBoxDisplayStyle.CHOOSE_ONE;
cb.FlatStyle = FlatStyle.CHOOSE_ONE;

我不确定您想要如何设置组合框的样式,因此不要使用“CHOOSE_ONE”,而是尝试样式并选择您想要的样式。

编辑:似乎您根本没有将其更改为组合框。试试这个:

var values = new List<string> { "a", "b", "c" };
var cell = new DataGridViewComboBoxCell();
cell.DataSource = values;
dataGridView1[col, row] = cell;
于 2012-09-05T07:24:38.010 回答
1

为此,您需要向网格添加一个新的 DataGridViewComboBoxColumn,然后隐藏文本框列。

我使用下面的代码展示了这一点,但您可以使用设计器执行相同的操作(只需使用设计器设置我在代码中设置的属性)。

需要注意的关键事项是:

  • DataPropertyName 是指网格数据源的属性 - 可能是您的文本框源
  • 您需要为该列提供自己的数据源
  • DisplayMember 和 ValueMember 指的是列的数据源

这是添加列的代码:

// Here I do this in the form constructor - there are other places you can do it
public Form1()
{
    InitializeComponent();

    DataGridViewComboBoxColumn col = new DataGridViewComboBoxColumn();

    // You need to set some properties on the column to make it work

    // Datasource is the source (usually a list) of objects to show in the combobox
    col.DataSource = dataSource;

    col.DataPropertyName = "ColumnInGridDataSource";
    col.DisplayMember = "DisplayProperty";
    col.ValueMember = "ValueProperty";

    dataGridView1.Columns.Add(col);

    // This hides the textboxcolumn
    dataGridView1.Columns["YourTextBoxColumnName"].Visible = false;
}
于 2012-09-05T16:10:07.063 回答