2010-01-16 21 views
8

CanUserAddRows="True" solo 'funciona' cuando ya hay datos en el ItemsSource del DataGrid. Si sucede que no hay filas en la lista original de elementos, entonces el DataGrid no muestra una fila placeholder para ingresar nuevos elementos, aunque configuré CanUserAddRows="True". ¡¿Por qué?!WPF DataGrid no puede Agregar una fila cuando el origen de datos está vacío

Gracias de antemano, Trindaz

+0

Además, lo que ocurre es que no se puede desplazar hacia la derecha para ver las columnas que están fuera de la pantalla, porque no tiene barras de desplazamiento horizontales sin elementos. –

Respuesta

2

Esto parece ser un problema conocido con WPF DataGrid. Consulte la discusión here (a partir del cuarto comentario) También parece estar corregido en .net 4. He realizado algunas pruebas para este tema en los marcos 3.5 y 4 (beta2). Pls, ver los resultados siguientes:

En primer lugar he definido 3 tipos de colecciones de artículos:

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

public class TestGridItems2<T> : List<TestGridItem> 
{ 
} 

donde TestGridItem es el siguiente:

public class TestGridItem 
{ 
    public string One { get; set; } 
    public string Two { get; set; } 
    public string Three { get; set; } 
} 

.NET 3.5

TestGridItems0 y TestGridItems1 no mostró una línea vacía para una colección vacía; donde como TestGridItems2 funcionó bien.

.net 4

única TestGridItems0 no mostró la línea de la colección vacía; otros 2 funcionó bien.

xaml para la red:

<my:DataGrid Name="dataGrid" AutoGenerateColumns="False" CanUserAddRows="True"> 
    <my:DataGrid.Columns> 
     <my:DataGridTextColumn Binding="{Binding One}" Header="One" /> 
     <my:DataGridTextColumn Binding="{Binding Two}" Header="Two" /> 
     <my:DataGridTextColumn Binding="{Binding Three}" Header="Three" /> 
    </my:DataGrid.Columns> 
</my:DataGrid> 

a continuación es cómo se asigna fuente de artículos:

dataGrid.ItemsSource = new TestGridItems0(); 
dataGrid.ItemsSource = new TestGridItems1(); 
dataGrid.ItemsSource = new TestGridItems2<TestGridItem>(); 

esperanza que esta ayuda, que se refiere a

+0

Una simple conversión '.ToList()' resolvió el problema. gracias por la pista. –

1

Añadir un elemento vacío al ItemsSource y quite eso. Es posible que deba volver a poner CanUserAddRows en true después de hacer esto. Leí esta solución here: (Publicaciones de Jarrey y Rick Roen)

Tuve este problema cuando configuré el ItemsSource en el DefaultView de un DataTable y la vista estaba vacía. Las columnas fueron definidas, por lo que debería haber sido capaz de obtenerlas. Je.

Cuestiones relacionadas