绑定DataGridView后插入不同值的列

Insert column with different values after binding DataGridView

我有一个 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;
}

不起作用,单元格为空。如何分配单元格值?

for (int i = 0; i < dgvPersonnelInfo.Rows.Count; i++)
{
    dgvPersonnelInfo.Rows[i].Cells[4].Value = arabicDeathYearMonth;
}

我假设您正在 Form 构造函数中执行上述代码;这是我复制你的空列的唯一方法。

  1. 将此代码移至其他位置,例如 Form.Load。这应该可以解决主要问题。
  2. 您现在会注意到第 4 列 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 看起来 类似于第 4 列,但 实际上 第 0 列。为什么?插入的列在 DataSource 的绑定列之前建立索引,这是由于在构造函数完成后解析绑定的方式, DataBindingComplete 被调用背景.

您可以通过更改对此列的分配来解决此问题:

dgvPersonnelInfo.Rows[i].Cells[0].Value = arabicDeathYearMonth;

但是由于我刚才解释的索引分配的固有歧义,您最好改为执行以下操作:

dgvPersonnelInfo.Rows[i].Cells["arabicYear"].Value = arabicDeathYearMonth;