2009-09-14 31 views
5

Esperaba que esta configuración afectara al control en sí, pero parece que no puedo agregar nuevas filas simplemente teniendo un DataGridView con AllowUserToAddRows establecido en verdadero. ¿Acabo de usar mi mouse y teclado, o he entendido mal esta propiedad? Sospecho que es el último, aunque no puedo encontrar mucho en el camino de la documentación que me señale en la dirección correcta.DataGridView: ¿qué hace AllowUserToAddRows?

EDITAR: por cierto, no es que sea una basura, parece ser algo relacionado con el uso de una lista como fuente de datos de DataGridView; el pequeño '*' simplemente no aparece si me enlace a una lista.

Respuesta

4

He resuelto esto cambiando STMTTRN de una lista a un BindingList - Lista parece tener un comportamiento muy extraño cuando se usa como un DataSource (vea mi otra pregunta reciente, que se resuelve de la misma manera).

Es en el código generado, pero yo ya había cambiado desde una matriz a una lista de por lo BindingList es apenas ningún problema adicional :)

2

Inténtelo,

DataTable dt = new DataTable(); 
dt.Columns.Add("No", typeof(int)); 
dt.Columns.Add("Name"); 
dataGridView1.AllowUserToAddRows = true; 
dataGridView1.EditMode = DataGridViewEditMode.EditOnKeystroke; 
dataGridView1.DataSource = dt; 

EDIT:

Tome un vistazo a IBindingList

+0

Probé tu código y funcionó, así que gracias :) Pero en realidad estoy usando una lista como DataSource, que (debido a que es la única diferencia) es probablemente la causa de mi problema. ¿Sabes por qué una Lista haría que la funcionalidad 'agregar fila' no funcionara? –

+0

Implementa la interfaz ** IBindingList **. – adatapost

0

que tenía el mismo problema.

utilizando un BindingSource como fuente de datos DGV y estableciendo la propiedad BindingSource AllowNew = True, resolvió mi problema.

Dim binding As New BindingSource 
binding.DataSource = myList 
binding.AllowNew = True 
With DataGridView1 
    .AutoGenerateColumns = False 
    .DataSource = binding 
End With 
2

El mismo problema para mí también, y BindingList no resolvió ella, pero la respuesta de Merlin me dio una pista hacia una eventual solución.

Envasar la lista en un BindingSource es una parte importante de la solución (como también se documenta en otra pregunta: Can't Allow User To Add Rows to DataGridView with List<> Datasource).

Y para mí, el paso que faltaba era que la clase de los objetos en mi lista no tenían un constructor público sin parámetros. Agregar un constructor sin parámetros habilitado AllowUserToAddRows para funcionar como se espera.

Me dio la idea de una excepción que se planteó cuando probé la respuesta de Merlin, el mensaje de lo que sugiere que también puede ser posible para permitir fila añadiendo por el manejo de la AddingNew evento:

AñadirNuevo no puede ser llamado en el tipo 'MyType'. Este tipo no tiene un constructor predeterminado público. Puede llamar a AddNew en el tipo 'MyType' si maneja el evento AddingNew y crea el objeto apropiado.

no lo probé esto, ya que, afortunadamente, la adición de un constructor sin parámetros pública no era un problema para mí, pero es un mensaje de esperanza para cualquier otra persona que no puede añadir un constructor sin parámetros.