2010-01-16 197 views
8

CanUserAddRows="True"仅在DataGridItemsSource中已有数据时才“有效”。如果只是在原始项目列表中没有行,则DataGrid不会显示用于输入新项目的placeholder行,即使我已设置CanUserAddRows="True"。为什么?!当数据源为空时,WPF DataGrid无法添加一行

由于提前, Trindaz

+0

还会发生什么,你不能向右滚动查看屏幕以外的列,因为你没有没有项目的水平滚动条。 – 2010-01-16 07:21:10

回答

2

这似乎是一个已知的问题与WPF的DataGrid。请参阅讨论here(从第4条评论开始)此外,它似乎在.net 4中得到了修复。我在3.5和4(beta2)框架上对此问题进行了一些测试。 PLS,见下面的结果:

首先我定义3种类型的项目的集合:

public class TestGridItems0 : ArrayList 
{ 
} 

public class TestGridItems1 : List<TestGridItem> 
{ 
} 

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

其中TestGridItem低于:

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

.NET 3.5

TestGridItems0和TestGridItems1没有为空集合显示空行; TestGridItems2确实工作正常。

.NET 4

只有TestGridItems0没有显示空收集行;其他2工作正常。

XAML网格:

<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> 
下面

是项目源是如何分配的:

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

希望这会有所帮助,至于

+0

简单的'.ToList()'转换解决了这个问题。谢谢你的提示。 – 2017-10-25 12:02:40

1

添加一个空的项目到您的ItemsSource,然后删除它。完成此操作后,您可能必须将CanUserAddRows重新设置为true。我读这个解决方案here:(由Jarrey和瑞克罗恩发布)

我有这个问题,当我将ItemsSource设置为DataTable的DefaultView和视图是空的。列被定义,但应该能够得到它们。嘿。