作成日: 2020/12/08 最終更新日: 2021/07/28
文書種別
不具合
状況
修正済み
詳細
LayoutModeプロパティをTemplateに設定してレイアウトテンプレートを有効にしたGcSpreadGrid上で、表示されているデータ件数が0件の状態でShiftキーを押しながら列ヘッダをクリックすると、次のエラーが発生します。
System.ArgumentOutOfRangeException: '指定された引数は、有効な値の範囲内にありません。
パラメーター名:type'
System.ArgumentOutOfRangeException: '指定された引数は、有効な値の範囲内にありません。
パラメーター名:type'
回避方法
Service Pack 5(v2.0.2021.0728)で修正済みです。
Service Pack 5(v2.0.2021.0726)より前のバージョンでは次の回避方法が有効です。
以下のように、列ヘッダ上のMouseDownイベントをオーバーライドする方法で回避することをご検討ください。
◎サンプルコード(VB)
◎サンプルコード(VB)
Imports GrapeCity.Windows.SpreadGrid Imports GrapeCity.Windows.SpreadGrid.Presenters Class MainWindow Private Sub Window_Loaded(sender As Object, e As RoutedEventArgs) ColumnEventManager.AddColumnHeaderMouseLeftButtonDownHandler(spGrid, AddressOf SpGrid_ColumnMouseDown) End Sub Private Sub SpGrid_ColumnMouseDown(sender As Object, e As ColumnClickEventArgs) If spGrid.ActiveCell Is Nothing Then e.Handled = True End If End Sub End Class Friend Class ColumnClickEventArgs Inherits EventArgs Public Sub New(headerText As String) Me.HeaderText = headerText End Sub Public ReadOnly Property HeaderText As String Public Property Handled As Boolean End Class Friend Class ColumnEventManager Shared Sub New() EventManager.RegisterClassHandler( GetType(ColumnHeaderCellPresenter), UIElement.MouseLeftButtonDownEvent, New RoutedEventHandler(AddressOf ColumnHeaderCellPresenters_Click)) End Sub Private Shared ReadOnly s_columnClickHandlers As New List(Of KeyValuePair(Of WeakReference(Of GcSpreadGrid), EventHandler(Of ColumnClickEventArgs))) Public Shared Sub AddColumnHeaderMouseLeftButtonDownHandler(spread As GcSpreadGrid, handler As EventHandler(Of ColumnClickEventArgs)) s_columnClickHandlers.Add(New KeyValuePair(Of WeakReference(Of GcSpreadGrid), EventHandler(Of ColumnClickEventArgs))( New WeakReference(Of GcSpreadGrid)(spread), handler)) End Sub Private Shared Sub ColumnHeaderCellPresenters_Click(sender As Object, e As RoutedEventArgs) Dim header = TryCast(e.Source, ColumnHeaderCellPresenter) If header Is Nothing Then Return End If Dim spread = VisualTreeHelperEx.GetParents(header).OfType(Of GcSpreadGrid).FirstOrDefault Dim handler As EventHandler(Of ColumnClickEventArgs) = Nothing If TryGetHandler(spread, handler) Then Dim headerGrid = VisualTreeHelperEx.GetChildren(header).OfType(Of Grid).First Dim headerContainer = VisualTreeHelperEx.GetChildren(headerGrid).OfType(Of CellElementContainer).First Dim headerBorder = VisualTreeHelperEx.GetChildren(headerContainer).OfType(Of Border).First Dim headerTextElement As Object = VisualTreeHelperEx.GetChildren(headerBorder).First Dim headerText = CStr(headerTextElement.Text) Dim clickArgs As New ColumnClickEventArgs(headerText) handler(spread, clickArgs) If clickArgs.Handled Then e.Handled = True End If End If End Sub Private Shared Function TryGetHandler(findSpread As GcSpreadGrid, ByRef handler As EventHandler(Of ColumnClickEventArgs)) As Boolean For i = s_columnClickHandlers.Count - 1 To 0 Step -1 Dim kv = s_columnClickHandlers(i) Dim curSpread As GcSpreadGrid = Nothing If kv.Key.TryGetTarget(curSpread) Then If findSpread Is curSpread Then handler = kv.Value Return True End If Else s_columnClickHandlers.RemoveAt(i) End If Next Return False End Function End Class Friend Class VisualTreeHelperEx Public Shared Iterator Function GetParents(obj As DependencyObject) As IEnumerable(Of DependencyObject) Dim curObj = VisualTreeHelper.GetParent(obj) Do While curObj IsNot Nothing Yield curObj curObj = VisualTreeHelper.GetParent(curObj) Loop End Function Public Shared Iterator Function GetChildren(obj As DependencyObject) As IEnumerable(Of DependencyObject) For i = 0 To VisualTreeHelper.GetChildrenCount(obj) - 1 Yield VisualTreeHelper.GetChild(obj, i) Next End Function End Class
旧文書番号
86238