В основном это простая игра с некоторыми событиями и включением / отключением свойства AllowUserToAddRow:
public Form1()
{
InitializeComponent();
//creating a test DataTable and adding an empty row
DataTable dt = new DataTable();
dt.Columns.Add("Column1");
dt.Columns.Add("Column2");
dt.Rows.Add(dt.NewRow());
//binding to the gridview
dataGridView1.DataSource = dt;
//Set the property AllowUserToAddRows to false will prevent a new empty row
dataGridView1.AllowUserToAddRows = false;
}
Теперь события ... Когда ячейка распознает редактирование, она вызовет событие CellBeginEdit.Когда он находится в режиме редактирования, установите для параметра AllowUserToAddRows значение false
private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
dataGridView1.AllowUserToAddRows = false;
}
Когда ячейка распознает конец редактирования, она вызовет событие CellEndEdit.Когда он завершает режим редактирования, проверьте ваши условия.На основе результата установите для параметра AllowUserToAddRows значение true или оставьте значение false.
private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
//instead of MessageBox there could be as well your check conditions
if (MessageBox.Show("Cell edit finished, add a new row?", "Add new row?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
dataGridView1.AllowUserToAddRows = true;
else dataGridView1.AllowUserToAddRows = false;
}