2008-11-14 26 views
13

Tengo un formulario de ganar (C#) con un datagridview. Establecí el origen de datos de la grilla en una tabla de datos.DatagridView ¿No muestra el icono de error o el texto de error?

El usuario desea comprobar si existen datos en la tabla de datos en otra fuente, de modo que recorremos la tabla comparando filas con la otra fuente y configuramos el rowerror en la tabla de datos en un mensaje corto. La vista de cuadrícula de datos no muestra estos errores. El errortexto en el datagridviewrows está configurado, pero no se muestra ningún error.

¿Estoy esperando demasiado para que los errores se muestren y solo se muestran en el contexto de la edición de los datos en la cuadrícula?

He estado jugando con esto por un día y busqué a alguien que haya publicado un problema simalar en vano - ¡ayuda!

Respuesta

-1

Creo que los errores solo se mostrarán en la edición. Lo que podría hacer es agregar una columna bool a su DataTable, que controla la visualización de una imagen/columna personalizada en DataGridView, lo que refleja si hay un error o no.

+1

Puede establecer el texto de error en una fila de la vista de cuadrícula de datos en cualquier momento, y debería mostrar el ícono. –

8

Compruebe que AutoSizeRowsMode se establece en DataGridViewAutoSizeRowsMode.None. Descubrí que el ícono de vista previa de la fila Errortext no se muestra cuando AutoSizeRowsMode no tiene el valor predeterminado de ninguno.

DataGridView1.AutoSizeRowsMode = DataGridViewAutoSizeRowsMode.None 
+0

No parece hacer la diferencia ... – Simon

+0

Funcionó para mí en .NET 3.5 – Gnat

+1

funcionó para mí también. Por cierto, aquí hay una [publicación de conexión] (http://connect.microsoft.com/VisualStudio/feedback/details/115989/datagridview-errortext-is-not-displayed-properly) que incluye una solución alternativa cuando aún necesita usar AutoSizeRowsMode – kman

8

Esto es un poco tarde para que el creador original, pero aquí lo resuelto por mí ...

comprobar la altura de la fila. Si es menor que , no dibujará el ícono. Intente configurarlo un poco más para ver si ese es el problema.

grid.RowTemplate.Height = 22 
4

Si configura e.Cancel en True, el icono no se muestra. Lo cual no le permite al usuario saber que existe un problema en esa línea.

+0

... en cuyo caso debe hacer algo como [esta respuesta] (http://stackoverflow.com/a/7714126/42961). – damian

0

En caso de que alguien más siga buscando, la solución que funcionó para mí fue reasignar el (mismo) DataSource al DataGridView y llamar al método Refresh en la grilla después de haber establecido las propiedades RowError.

(código de VB.Net :)

myDataGridView.DataSource = myDataSet.Tables(0) 
myDataGridView.Refresh() 

Después de hacer eso, los recién asignados de RowError fueron finalmente aparece.

+1

Me encontré después de configurar el texto de error de la celda: ¡estaba reacomodando la Cuadrícula de nuevo y borrando todos los errores de ErrorTexts! En base a esto, fue fácil de arreglar ** pero ** me hizo pensar cómo ** su solución fue la causa de mi problema **. –

4

El DataGridView tiene que estar visible en el momento en que se establece la propiedad ErrorText.

-1

Enviar una pulsación de tecla ESC obligará a mostrar (al menos trabajado para mí)

SendKeys.Send("{ESC}"); 
1

Comprobar dgv.ShowRowErrors propiedad.

0

Una razón más por la que no se muestra el icono de error es, si el tamaño del encabezado de fila es demasiado pequeño. De forma predeterminada, es 46. Si por algún motivo establece el encabezado de fila en un tamaño más pequeño, como 30, el icono de error no se mostrará.

-1

I experimentaron problema similar al validar la entrada del usuario en el controlador

private void gridGrid_CellValidating(object sender, DataGridViewCellValidatingEventArgs e) 

. El problema fue que configuré e.Cancel=true en caso de entrada no válida.

1

Si está utilizando Visual Studio 2017 y sus datos no se une a una fuente de datos, entonces usted tiene que establecer el ErrorText en la celda en lugar de la fila, así:

gvwWebsites.Rows[e.RowIndex].Cells[e.ColumnIndex].ErrorText = "You have already used that address."; 
Cuestiones relacionadas