绑定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
构造函数中执行上述代码;这是我复制你的空列的唯一方法。
- 将此代码移至其他位置,例如
Form.Load
。这应该可以解决主要问题。
- 您现在会注意到第 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;
我有一个 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
构造函数中执行上述代码;这是我复制你的空列的唯一方法。
- 将此代码移至其他位置,例如
Form.Load
。这应该可以解决主要问题。 - 您现在会注意到第 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;