Quiero que aparezca un OpenFileDialog cuando un usuario hace clic en una celda y luego muestra el resultado en la celda.Lanzamiento de DataGridView "InvalidOperationException: operación no válida ..." al agregar una fila
Todo funciona, excepto que DataGridView muestra una fila adicional, para agregar valores a la lista a la que está vinculado. La fila aparece si dataGridView.AllowUserToAddNewRows == true
, que es lo que quiero. Lo que no quiero es que la aplicación se cuelgue cuando esa fila se edita programáticamente; en su lugar, debería hacer exactamente lo que haría si el usuario hubiera editado esa fila manualmente (agregue la nueva fila a la lista subyacente, inserte otra fila vacía en la cuadrícula para agregar valores).
He leído acerca de SendKeys.Send(), que debe hacer que DataGridView se comporte exactamente como si el usuario hubiera tecleado el valor; sin embargo, tampoco funciona. Esto es lo que estoy tratando:
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.
¿Qué tipo de excepción recibes cuando configuras 'cell.Value'? –
@Zach: Cuando hago clic en la celda vacía, rellena el valor correctamente, pero no agrega otra fila vacía. Cuando hago clic fuera de la fila, los valores en todas las celdas en esa fila final desaparecen (esto solo ocurre en esa última fila). Cuando vuelvo a hacer clic en la fila final, aparece InvalidOperationException: "La operación no es válida debido al estado actual del objeto". dataGridView1_CellClick es el único evento que estoy manejando en ese formulario (mostrado arriba) –