ここで問題があると思いますが、残りのDataGridViewをReadOnlyにしたいのですか?残念ながら、AllowUserToAddRowsとReadOnlyの2つのプロパティは矛盾しています.ReadOnlyがtrueの場合、AllowUserToAddRowsは実際に新しい行を与えますが、編集することはできません。
あなたが本当にこれをやりたいのであれば、あなたは少し創造的である必要があります。複数の方法がありますが、このようなものはうまくいくはずです。 AllowUserToAddRowsをtrueに設定し、ReadOnlyをfalseに設定します。プライベートフィールドを追加します。
private int addedRowIndex = -1;
次はイベントのカップルを追加します。
private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e)
{
addedRowIndex = dataGridView1.NewRowIndex - 1;
}
と
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
if (!dataGridView1.Rows[e.RowIndex].IsNewRow)
{
if (addedRowIndex != e.RowIndex)
{
e.Cancel = true;
}
}
}
}
これは古い行に対するすべての変更をキャンセルする効果があります。
私はこのようなことは絶対にしません。 DataGridViewsには多くのフォームがあり、常にReadOnly true、AllowUserToAddRows falseです。新しいレコードを追加するには、ユーザーが新しいレコードを入力できるようにするModal Formを開くボタンを用意します。このレコードはデータベースに保存され、フォームが閉じられます。この時点で、DataGridViewは更新されます。私は保存する前にエントリを検証する方がずっと簡単だと分かっています。それだけでなく、特定のデータ型に対して特殊なコントロールを提供するほうがずっと簡単です。日付は非常に良い例です。私はスプレッドシート型の「利便性」のような人々を知っていますが、データベースアプリケーションはデータの整合性を最初に置くべきです。
これを確認しましたか?http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/これは、ほとんどのdatagridview操作をカバーします –
@SouvikGhoshこの例は、挿入するためのフォームを持っていますが、既存のデータグリッドビューに行を追加し、データを追加して保存したい –