假设我在设计视图中创建了这个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项。
答案 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的第一项。