初始化网格时,同一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); }