valor validar vacio vacia una saber repetidos existe esta ejemplos editar datos dato celda cambiar c# datagridview validating

vacio - validar datos repetidos en datagridview c#



ValidaciĆ³n de DataGridView y cambio de valor de celda (2)

El evento CellValidating se produce justo antes de que DataGridView abandone el modo de edición; es un evento que se relaciona con / implica el control de edición ( DataGridView.EditingControl ). Nunca debe intentar cambiar el valor de celda en el controlador para este evento, porque a menos que cancele el evento (en cuyo caso el usuario se queda atascado en el modo de edición), el valor de celda se establece en el valor del control de edición inmediatamente después del finaliza el evento. Esto, por lo tanto, deshace cualquier acción que realice en el controlador.

Lo que tiene que hacer en su lugar es cambiar el valor en el control de edición (recordar no cancelar el evento). Por ejemplo, para un DataGridViewTextBoxCell , usaría lo siguiente en lugar de su línea problemática:

unit_List_2_GroupsDataGridView.EditingControl.Text = Convert.ToString(rows[0]["Batch"]);

Debes encontrar que esto resuelve tu problema.

Me gustaría manipular una celda en mi DataGridView cuando se está validando, de modo que si el usuario ingresa un valor que no es válido para la base de datos, pero que se convierte fácilmente en datos válidos, el programa cambiará el valor a uno apropiado.

Puedo validar mi valor correctamente, pero cuando intento cambiarlo a algo válido, obtengo un DataError. Aquí está mi código:

private void unit_List_2_GroupsDataGridView_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) { Console.WriteLine("Validating"); DataGridViewColumn col = this.unit_List_2_GroupsDataGridView.Columns[e.ColumnIndex]; DataGridViewCell cell = this.unit_List_2_GroupsDataGridView.Rows[e.RowIndex].Cells[e.ColumnIndex]; if (col == this.batchDataGridViewTextBoxColumn && this.unit_List_2_GroupsDataGridView.IsCurrentCellInEditMode) { Console.WriteLine(" Batch Column"); DataRow[] rows = label_EntryDataSet.viewJobBatchList.Select(String.Format("Job={0} AND Display=''{1}''" , comboBox1.SelectedValue, e.FormattedValue)); if (rows.Length == 1) { Console.WriteLine(" Auto Completed item from list: {0}", rows[0]["Batch"]); //e.Cancel = true; cell.Value = rows[0]["Batch"]; //this.unit_List_2_GroupsDataGridView.EndEdit(); } else { Console.WriteLine(" No Autocomplete!"); int i = 0; if (!int.TryParse(e.FormattedValue.ToString(), out i)) { Console.WriteLine(" Not an integer either"); e.Cancel = true; } } } }

La línea que lee cell.Value = rows [0] ["Batch"]; No está haciendo lo que espero que haga.


En general, es mejor usar el evento CellParsing siempre que necesite convertir / cambiar el valor en una celda. Desde ese evento, puede indicar que el valor del usuario no es válido configurando el valor ErrorText de la celda o fila.