Pregunta

¿Cómo puedo evitar que el elemento actual de bindingSource cambie? (no hay evento cambiante con cancelar argumento ...)

Este es el escenario:

  • Tengo un dataGridView y cuadros de texto en el mismo formulario.
  • Estoy usando cuadros de texto para cambiar los valores en la fuente de datos (con enlace de datos estándar)
  • Los enlaces se escriben manualmente (después de hacer clic en el botón Guardar)

  • Cuando el usuario selecciona otra fila con DataGridView, se cambia la propiedad de bindingSource.Current, y se actualizan los cuadros de texto con los valores de la fila seleccionada. Los cambios que el usuario ingresó se pierden.

¿Hay alguna manera de prevenir este problema?

¿Puedo evitar que la propiedad bindingSource.Current cambie?

¿Hay alguna opción mejor para prevenir este comportamiento?

(deshabilitar dataGridView es desafortunadamente no es una opción)

¿Fue útil?

Solución

Parece que no desea no cambiar bindingSource.Current , sino que desea guardar el contenido de los cuadros de texto antes de cambiar la fila actual. Si ha vinculado una colección a bindingSource , ¿no hacen referencia los cuadros de texto a las propiedades en el elemento actual de esa colección?

No estoy realmente seguro de lo que estás tratando de hacer, pero una toma en la oscuridad podría ser unir el mismo DataSource a dos objetos diferentes BindingSource , algo como esto:

gridBindingSource.DataSource = theDataSource;
textBoxBindingSource.DataSource = theDataSource;
myDataGrid.DataSource = gridBindingSource;
firstNameTextBox.Bindings.Add (new Binding ("Text", textBoxBindingSource, "FirstName"));

pero esto sería extraño, porque si theDataSource es apropiado para un control de cuadrícula, entonces es una colección de cosas que tienen un FirstName propiedad. Tal vez si fueras más específico en tu pregunta.


ETA: si desea guardar el contenido del cuadro de texto en la fila actual, llame a ValidateChildren () en el contenedor antes de que cambie la propiedad bindingSource.Current .

Otros consejos

Tengo un marco algo similar con cuadrículas y cuadros de texto en la misma forma. Cuando el usuario hace clic en el botón EDITAR (o Agregar), simplemente deshabilito el propio control de vista de cuadrícula ...

MyDataGrid.Enabled = false;

continuar editando ...

Luego, en GUARDAR, si todo está bien,

MyDataGrid.Enabled = true;

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top