以编程方式将ComboBox添加到DataGridView

时间:2018-05-16 15:34:56

标签: c# winforms datagridview

enter image description here

假设我在设计视图中创建了这个DataGridView。

现在,我需要以编程方式将项目添加到ComboBox列,并显示index = 0的项目。

以下代码确实加载了ComboBox。

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {

        dataGridView1.Rows.Add("1st Col", "2nd Col");
        Column3.Items.Add("AAAA");
        Column3.Items.Add("BBBB");
        Column3.Items.Add("CCCC");

    }
}

但是,没有显示第0项。

3 个答案:

答案 0 :(得分:1)

你可以尝试:

private void Form1_Load(object sender, EventArgs e)
{
    DataGridViewComboBoxColumn cmb = new DataGridViewComboBoxColumn();
    cmb.Items.Add("AAAA");
    cmb.Items.Add("BBBB");
    cmb.Items.Add("CCCC");

    dataGridView1.Rows.Add("1st Col", "2nd Col");
    dataGridView1.Columns.Add(cmb);
}

答案 1 :(得分:0)

您必须为列中的每个单元格设置当前值。

for (int i = 0; i < dataGridView.RowCount; i++)
    dataGridView[3, i].Value = "AAAA";

答案 2 :(得分:0)

我建议您使用自定义DataGridViewComboBoxColumn设置CellTemplate的默认/初始值的替代方法。

假设(从显示的图像中),您的ComboBox列为Column[2],您可以为其指定此自定义CellTemplate,可以使用默认值进行初始化:
(此处,默认值为String类型,但如果需要,您可以将其设为通用的)

public class ComboBoxCell : DataGridViewComboBoxCell
{
    private static string psDefaultValue;
    public ComboBoxCell()
        : base() { this.Value = psDefaultValue; }

    public void DefaultValue(string Value)
    {
        psDefaultValue = Value;
        this.Value = Value;
    }
    public override Type ValueType => typeof(String);
    public override object DefaultNewRowValue => psDefaultValue;
}

初始化DataGridView时,将自定义CellTemplate分配给DataGridViewComboBoxColumn

ComboBoxCell ComboBoxCellTemplate = new ComboBoxCell();
dataGridView1.Columns[2].CellTemplate = ComboBoxCellTemplate;

然后,在填写ComboBox项目列表后,定义默认值并使用DefaultValue()的自定义CellTemplate方法进行分配:

((DataGridViewComboBoxColumn)dataGridView1
                            .Columns[2])
                            .Items.AddRange(new string[] { "Item1", "Item2", "Item3" });

((ComboBoxCell)dataGridView1.Columns[2]
                            .CellTemplate)
                            .DefaultValue(((DataGridViewComboBoxColumn)dataGridView1
                            .Columns[2]).Items[0].ToString());

之后,定义DatagridView数据源。这样,对于所有新行,DataGridVieewComboBoxColumn将显示默认值,在这种情况下为ComboBox的第一项。