我有DataGridView
:
dgvPersonnelInfo.DataSource = personnelInfo;
现在我按如下方式添加一列:
var arabicYear = new DataGridViewColumn();
arabicYear.Name = "arabicYear";
arabicYear.HeaderText = "Arabic Year";
arabicYear.CellTemplate = new DataGridViewTextBoxCell();
dgvPersonnelInfo.Columns.Insert(4, arabicYear);
然后我想按如下方式分配这个单元格的值:
for (int i = 0; i < dgvPersonnelInfo.Rows.Count; i++)
{
dgvPersonnelInfo.Rows[i].Cells[4].Value = arabicDeathYearMonth;
}
它不起作用,单元格是空的。如何分配单元格值?
答案 0 :(得分:0)
for (int i = 0; i < dgvPersonnelInfo.Rows.Count; i++) { dgvPersonnelInfo.Rows[i].Cells[4].Value = arabicDeathYearMonth; }
我假设您在Form
构造函数中执行上述代码;这是我可以复制空列的唯一方法。
Form.Load
。这应该解决主要问题。Arabic Year
未填充,而第3列则包含预期数据。即使你的代码:
dgvPersonnelInfo.Columns.Insert(4, arabicYear);
将列插入第4个索引(将正确显示它),该列的未来访问将通过第0个索引。要验证这是真的,请连接以下处理程序:
private void dgvPersonnelInfo_CellClick(object sender, DataGridViewCellEventArgs e)
{
dgvPersonnelInfo.Rows[e.RowIndex].Cells[e.ColumnIndex].Value = e.ColumnIndex;
}
通过点击每列中的单元格,您会看到Arabic Year
列看起来像一样,但是实际上列0.为什么?由于在构造函数完成后解析绑定的方式并且在后台调用 DataSource
,因此插入的列在DataBindingComplete
的绑定列之前编制索引
您可以通过将此列的分配更改为:
来解决此问题dgvPersonnelInfo.Rows[i].Cells[0].Value = arabicDeathYearMonth;
但是由于我刚才解释的索引分配固有的模糊性,你最好不要做以下事情:
dgvPersonnelInfo.Rows[i].Cells["arabicYear"].Value = arabicDeathYearMonth;