我如何摆脱 Datagrid 创建的额外行

Posted

技术标签:

【中文标题】我如何摆脱 Datagrid 创建的额外行【英文标题】:How do i get rid of an extra row created by Datagrid 【发布时间】:2015-11-19 04:44:05 【问题描述】:

我的 WPF .net 应用程序中有两个 DataGrid。其中一个工作正常,另一个正在创建一个(空)行,我不知道它是在哪里添加的。数据网格看起来与我非常相似。

以下是网格的生成方式:

    <DataGrid AutoGenerateColumns="False" 
      Name="grid1">
        <DataGrid.Columns >
            <DataGridTextColumn Binding="Binding Path=HUHU" MinWidth="120" Header="HUHU" />
            ... some columns
        </DataGrid.Columns>
    </DataGrid>

    <DataGrid AutoGenerateColumns="False"
      Name="grid2" >
        <DataGrid.Columns>
            <DataGridTextColumn Binding="Binding Path=HU" MinWidth="50" Header="HU" />
            ... some columns
        </DataGrid.Columns>
    </DataGrid>

以下是网格的填充方式:

    Dim grid1Source = New List(Of SomeType)

    For Each a As SomeType In MyFunctions.GetAllCalendarItems(CalendarPicker.SelectedDate)
        grid1Source.Add(a)
    Next
    grid1.ItemsSource = gird1Source

    Dim grid2Source = New List(Of SomeOtherType)

    For Each fa As SomeOtherTypeIn MyFunctions.GetsomeCalendarItems(CalendarPicker.SelectedDate)
        grid2Source.Add(fa)
    Next
    grid2.ItemsSource = grid2Source

现在棘手的事情是:它们看起来不同了。其中之一是包含一个空行。 (你可以在下图中看到)这不是因为从函数返回的坏/空对象(用调试器检查了大约 500 次)。

任何想法如何解决这个问题?

【问题讨论】:

canuseraddrows = false ?额外的行看起来像网格尝试添加的新行,如果您将 canuseraddrows 设置为 false,它应该会消失 是的,它正在工作!但是为什么我在第二个 DataGrid 中不需要它呢?两个都没有这个属性。 这可能取决于许多因素,起点是检查 someOtherType 是否为 IEditableObject ? 【参考方案1】:

看起来这个额外的行是 dataGrid 提供的新行。您需要标记CanUserAddRows = False 以停止此功能。

这将阻止网格让用户添加新行。

另外,请阅读 this 了解有关 CanUserAddRows 工作原理的更多信息

CanUserAddRows 如果 DataGrid 不是 ReadOnly 和 IsEnabled,则为 True, CanUserAddRows 设置为 true 并且 IEditableCollectionView.CanAddNew 是 真的

【讨论】:

以上是关于我如何摆脱 Datagrid 创建的额外行的主要内容,如果未能解决你的问题,请参考以下文章

iOS如何摆脱额外的视图填充?

序列化表单为json对象,datagrid带额外参提交一次查询 后台用Spring data JPA 实现带条件的分页查询

如何获取easyui datagrid的全部数据

如何在 UWP c# 中用 DataTable 内容填充 DataGrid

wpf中如何获得dataGrid选中行的值

EasyUI datagrid 如何默认选择多行