当数据源为空时,WPF DataGrid无法添加行

时间:2010-01-16 00:28:55

标签: wpf datagrid row itemssource

CanUserAddRows="True"仅当ItemsSource的{​​{1}}中已有数据时才“有效”。如果恰好发生原始项目列表中没有行,则DataGrid不会显示用于输入新项目的DataGrid行,即使我已设置placeholder }。为什么呢?!

提前致谢, Trindaz

2 个答案:

答案 0 :(得分:2)

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

首先,我定义了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>();

希望这有帮助,尊重

答案 1 :(得分:1)

将空项添加到ItemsSource,然后将其删除。执行此操作后,您可能必须将CanUserAddRows设置为true。我读了这个解决方案here :( Jarrey和Rick Roen的帖子)

当我将ItemsSource设置为DataTable的DefaultView并且视图为空时,我遇到了这个问题。尽管定义了列,但它应该能够获得它们。嘿。