Я хочу, чтобы OpenFileDialog появился, когда пользователь нажимает на ячейку, а затем отображает результат в ячейке.DataGridView throwing «InvalidOperationException: операция недопустима ...» при добавлении строки
Все работает, за исключением того, что DataGridView отображает дополнительную строку для добавления значений в список, к которому он привязан. Строка отображается, если dataGridView.AllowUserToAddNewRows == true
, что я и хочу. Я не хочу, чтобы приложение зависало, когда эта строка редактируется программно; вместо этого он должен делать то, что он сделал бы, если бы пользователь отредактировал эту строку вручную (добавьте новую строку в базовый список, нажмите еще одну пустую строку в сетку для добавления значений).
Я прочитал о SendKeys.Send(), который должен заставить DataGridView вести себя точно так, как если бы пользователь набрал значение; однако он тоже не работает. Вот что я пытаюсь:
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
dataGridView1.CurrentCell = cell;
//simply doing a cell.Value = etc. will cause the program to crash
cell.ReadOnly = false;
dataGridView1.Columns[cell.ColumnIndex].ReadOnly = false;
dataGridView1.EditMode = DataGridViewEditMode.EditOnEnter;
dataGridView1.BeginEdit(true);
SendKeys.Send(openFileDialog1.FileName + "{Enter}");
dataGridView1.EndEdit();
cell.ReadOnly = true;
dataGridView1.Columns[cell.ColumnIndex].ReadOnly = true;
}
//I would expect the FileName would be in the cell now, and a new empty
//row tacked onto the end of the DataGridView, but it's not; the DataGridView
//is not changed at all.
Какое исключение вы получаете, когда устанавливаете 'cell.Value'? –
@Zach: Когда я нажимаю на пустую ячейку, она правильно заполняет значение, но не добавляет еще одну пустую строку. Когда я выхожу из строки, значения во всех ячейках этой последней строки исчезают (это происходит только для этой последней строки). Когда я снова нажимаю на последнюю строку, я получаю InvalidOperationException: «Операция недействительна из-за текущего состояния объекта». dataGridView1_CellClick - единственное событие, которое я обрабатываю в этой форме (показано выше). –