绑定DataGridView后插入具有不同值的列

时间:2015-06-10 10:06:51

标签: datagridview cell

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

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

1 个答案:

答案 0 :(得分:0)

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列则包含预期数据。
  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;