SelectionChanged事件发生的次数多于应有的次数

时间:2016-04-07 11:49:32

标签: vb.net dotnetbar

我有网格,这些网格填充在Form的加载事件中。在该事件的结束行,我正在为此网格的SelectionChanged事件挂钩方法处理程序。我想获得当前所选行的零单元格1值。不幸的是,当我运行程序时,我的SelectionChanged事件方法处理程序被称为无限次...而且我不知道为什么会这样。

所以它基本上是这样的:

 Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

some code which populating data to grid...

'here hooking up method after data is there already to not fire it up during grid population
   AddHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged

End Sub

这是事件处理程序方法本身:

  Private Sub gridArtikels_SelectionChanged(sender As Object, e As GridEventArgs)
        RemoveHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged

        If gridArtikels.PrimaryGrid.Rows.Count > 0 Then
            gridArtikels.PrimaryGrid.SetSelectedRows(0, 1, True)
            ItemPanelImgs.Items.Clear()
            'Dim images As New List(Of Article_Image)
            Dim selectedNummer As String = String.Empty

            selectedNummer = gridArtikels.PrimaryGrid.SelectedRows(0).Cells(1).Value.ToString()

            'images = ArtikelsAndTheirVariationsFinal.GetImagesForArticle(selectedNummer)
            'ItemPanelImgs.DataSource = images
        End If

        AddHandler gridArtikels.SelectionChanged, AddressOf gridArtikels_SelectionChanged
    End Sub

P.S我使用的是来自DotnetBar devcomponenets的具体超级网格控件,但它不应该与普通的控件行为不同。

这里可能有什么问题?

For those whom would like to debug here is sample app

编辑: 我也试过这种方式,但它仍然会进入无限循环...

  Public IgnoreSelectionChanged As Boolean = False

 Private Sub gridArtikels_SelectionChanged(sender As Object, e As GridEventArgs) Handles gridArtikels.SelectionChanged

        If IgnoreSelectionChanged Then Exit Sub


        IgnoreSelectionChanged = True

        If gridArtikels.PrimaryGrid.Rows.Count > 0 Then
            gridArtikels.PrimaryGrid.SetSelectedRows(0, 1, True)
            ItemPanelImgs.Items.Clear()
            'Dim images As New List(Of Article_Image)
            Dim selectedNummer As String = String.Empty

            selectedNummer = gridArtikels.PrimaryGrid.SelectedRows(0).Cells(1).Value.ToString()

            'images = ArtikelsAndTheirVariationsFinal.GetImagesForArticle(selectedNummer)
            'ItemPanelImgs.DataSource = images

        End If

        IgnoreSelectionChanged = False

    End Sub

0 个答案:

没有答案