DataGrid行删除导致错误

时间:2014-02-20 21:58:12

标签: wpf vb.net datagrid user-controls

我有一个数据网格,我根据用户的选择以编程方式在行定义中添加一定数量的用户控件对象。当用户选择一个新选项时,我试图清除除标题之外的每一行,但我仍然发现最后一行定义由于某种原因在我的标题顶部以可视方式结束。这是我的代码:

这是我在其中添加带有用户控件的行:

            For Each qTask As QTask In QBD.Tasks
                Dim rowDef As New RowDefinition
                rowDef.Height = New GridLength(0, GridUnitType.Auto)
                grdQBD.RowDefinitions.Add(rowDef)

                Dim newTask As New QBDControls
                newTask.DataContext = qTask

                ...

                Grid.SetRow(newTask, grdQBD.RowDefinitions.Count - 1)
                Grid.SetColumn(newTask, 0)
                Grid.SetColumnSpan(newTask, 7)
                grdQBD.Children.Add(newTask)

这是我删除行的地方(除了第一个,我的标题之外的所有行):

    Dim rows As Integer = grdQBD.RowDefinitions.Count
    If rows > 1 Then
        For child As Integer = rows - 1 To 1 Step -1
            grdQBD.RowDefinitions.RemoveAt(child)
            'I'VE ALSO TRIED .REMOVERANGE
        Next
    End If

Here's the before Here's the after

请注意,最后一行包含标题。

1 个答案:

答案 0 :(得分:1)

好吧,您的问题是,您只是删除了RowDefinitions而不是实际的UserControls

由于只剩下一个RowDefinition,所有UserControls将在剩下的一个中,全部在彼此之上,最后一个添加为最顶层的。{/ p>

为了获得您想要的行为,我猜您也必须删除UserControls

您可以通过查看Grid的子项,并在循环中删除当前行索引的子项来完成此操作。

Dim rows = g1.RowDefinitions.Count

If rows > 1 Then
    For i As Integer = rows - 1 To 1 Step -1
        g1.RowDefinitions.RemoveAt(i)

        ' Find the control in the row and remove it
        Dim controlToRemove = g1.Children.Cast(Of UIElement)()
            .Single(Function(c) Grid.GetRow(c) = i)

        g1.Children.Remove(controlToRemove)
    Next
End If