これRowsAdded
ではイベントは機能しません。デバッグ出力をイベント ハンドラーに追加してみてください。イベントが単一の行ではなく行のセットに対して発生することがわかります。これが、最初の 2 つの値のみが入力される理由です。
これを行うのに適した場所は、DataBindingComplete
およびDefaultValuesNeeded
イベントです。
DataBindingComplete
最初のロードですべての値が入力され、その後DefaultValuesNeeded
すべての新しい行が入力されます。
DataBindingComplete:
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が示唆する行ヘッダー。
最後に 1 つ注意してください - この種の自動生成された列は通常、CellValidating
イベントで行うのが最適です。たとえば、他の 2 つの列を合計する列がある場合などです。あなたの列は他の列に基づいていないため、ここでは機能しませんが、一般的な方法として言及する価値があります。