该RowsAdded
事件对此不起作用 - 尝试向您的事件处理程序添加一些调试输出,您将看到该事件是针对一组行而不是针对单行触发的,这就是为什么您只填写前两个值的原因。
一个更好的地方是在DataBindingComplete
和DefaultValuesNeeded
事件中。
DataBindingComplete
将在第一次加载时填写所有值,然后DefaultValuesNeeded
填写每个新行。
数据绑定完成:
void dataGridView1_DataBindingComplete(object sender, DataGridViewBindingCompleteEventArgs e)
{
foreach (DataGridViewRow r in dataGridView1.Rows)
{
r.Cells["AutoGenColumn"].Value = r.Index + 1;
}
}
需要的默认值:
void dataGridView1_DefaultValuesNeeded(object sender, DataGridViewRowEventArgs e)
{
dataGridView1.Rows[e.Row.Index].Cells["AutoGenColumn"].Value = e.Row.Index + 1;
}
这个要求似乎有点不寻常——你没有解释为什么需要这个数字,但你可能想看看将行添加到你的基础数据集中(例如,很容易用 DataTable 做)或者把它放到Subek 建议的行标题。
最后要注意的一件事 - 这种自动生成的列通常最好在CellValidating
事件中完成,例如,当你和你对其他两列求和的列时。这在这里行不通,因为您的专栏不是基于其他专栏,但值得一提的是作为一般方式。