初始化网格时,同一DataGridView列中的控件不会呈现

好坏

DataGridView列中的不同控件在此处输入图像描述

我在DataGridView列中托管不同的控件。 当我同时添加控件时,我初始化网格控件显示为文本框(BAD)。 如果我在DataGridView初始化后添加控件,则控件正确呈现(GOOD)。

public Form1() { InitializeComponent(); ControlsInGridViewColumn(); //<- renders controls as textboxes } private void button1_Click(object sender, EventArgs e) { ControlsInGridViewColumn(); //<- does correctly render controls } private void ControlsInGridViewColumn() { DataTable dt = new DataTable(); dt.Columns.Add("name"); for (int j = 0; j < 10; j++) { dt.Rows.Add(""); } this.dataGridView1.DataSource = dt; this.dataGridView1.Columns[0].Width = 200; DataGridViewComboBoxCell ComboBoxCell = new DataGridViewComboBoxCell(); ComboBoxCell.Items.AddRange(new string[] { "aaa","bbb","ccc" }); this.dataGridView1[0, 0] = ComboBoxCell; this.dataGridView1[0, 0].Value = "bbb"; DataGridViewTextBoxCell TextBoxCell = new DataGridViewTextBoxCell(); this.dataGridView1[0, 1] = TextBoxCell; this.dataGridView1[0, 1].Value = "some text"; DataGridViewCheckBoxCell CheckBoxCell = new DataGridViewCheckBoxCell(); CheckBoxCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter; this.dataGridView1[0, 2] = CheckBoxCell; this.dataGridView1[0, 2].Value = true; } 

如何在初始化期间使控件正确呈现?

(我正在动态添加DataGridViews)。

更新: Jacob Seleznev的答案适用于Forms而不是用户控件,这就是我需要的……以下是如何重现它:

在表格中:

 private void button3_Click(object sender, EventArgs e) { this.Controls.Add(new userCtrl()); } 

用户控件:

 public partial class userCtrl : UserControl { public userCtrl() { InitializeComponent(); } protected override void OnLoad(EventArgs e) { ControlsInGridViewColumn(); base.OnLoad(e); } public void ControlsInGridViewColumn() { //same code as above } } 

这对我有用:

  protected override void OnLoad(EventArgs e) { ControlsInGridViewColumn(); //<- does correctly render controls base.OnLoad(e); }