IMPACT:
- Silverlight application crash and data lost.
- Because we need to export the GridView to excel and won't like to use Paged-GridView, it's really a blocking issue for us.
TELERIK VERSION:
2011.1.419.1040
REPRO STEPS:
1. Wrote a sample VS solution for repro. See attached TelerikGridViewBUG.zip for detail.
2. Open Visual Studio solution TelerikGridViewBUG.sln with admin privilege.
3. Click through Visual Studio menu Debug -> Exceptions to launch the Exceptions dialog.
4. Check "Common Language Runtime Exceptions" checkbox on the Exceptions dialog and click OK to save.
5. Press F5 to launch the website in debugger mode and click the "Show Question" button on the page
6. On the launched "RadGridViewChildWindow", use Mouse to scroll down once. See the illustration below. See Illustration3 for detail.
7. Use mouse to scroll up to the top of the RadGridView.
8. Mouse hover on the "Question Description" column of the RadGridView. You should choose the other row of the current Mouse located at.
For example, after you scroll up to the top of the RadGridView, your mouse are at row 4. Then try to move your mouse to row 2 and column "Question Description" to let the tooltip shown.
See Illustration4 for detail.
9. KEEP THE TOOLTIP SHOWN MORE THAN 2 SECONDS AND QUICKLY SCROLL DOWN.
10. You will see the Silverlight Application crash.
CALLSTACK
Below is the callstack of crash exception. I also highlighted several the lines from Telerik.Windows.Controls.GridView:
> System.Windows.dll!MS.Internal.XcpImports.CheckHResult(uint hr) + 0x48 bytes
System.Windows.dll!MS.Internal.XcpImports.SetValue(MS.Internal.IManagedPeerBase obj, System.Windows.DependencyProperty property, bool b) + 0x6f bytes
System.Windows.dll!System.Windows.DependencyObject.SetValue(System.Windows.DependencyProperty property, bool b) + 0x2e bytes
System.Windows.dll!System.Windows.Controls.ToolTip.BeginClosing() + 0x251 bytes
System.Windows.dll!System.Windows.Controls.ToolTip.OnIsOpenChanged(bool isOpen) + 0x3a bytes
System.Windows.dll!System.Windows.Controls.ToolTip.OnIsOpenPropertyChanged(System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e) + 0x8d bytes
System.Windows.dll!System.Windows.DependencyObject.RaisePropertyChangeNotifications(System.Windows.DependencyProperty dp, object oldValue, object newValue) + 0x51 bytes
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xf6 bytes
System.Windows.dll!System.Windows.DependencyObject.SetValueInternal(System.Windows.DependencyProperty dp, object value, bool allowReadOnlySet) + 0x2ad bytes
System.Windows.dll!System.Windows.DependencyObject.SetValue(System.Windows.DependencyProperty property, bool b) + 0x60 bytes
System.Windows.dll!System.Windows.Controls.ToolTipService.UnregisterToolTip(System.Windows.UIElement owner) + 0x1d0 bytes
System.Windows.dll!System.Windows.Controls.ToolTipService.OnToolTipPropertyChanged(System.Windows.DependencyObject d, System.Windows.DependencyPropertyChangedEventArgs e) + 0x2f bytes
System.Windows.dll!System.Windows.DependencyObject.RaisePropertyChangeNotifications(System.Windows.DependencyProperty dp, object oldValue, object newValue) + 0x51 bytes
System.Windows.dll!System.Windows.DependencyObject.UpdateEffectiveValue(System.Windows.DependencyProperty property, System.Windows.EffectiveValueEntry oldEntry, ref System.Windows.EffectiveValueEntry newEntry, System.Windows.DependencyObject.ValueOperation operation) + 0xf6 bytes
System.Windows.dll!System.Windows.DependencyObject.SetValueInternal(System.Windows.DependencyProperty dp, object value, bool allowReadOnlySet) + 0x2ad bytes
System.Windows.dll!System.Windows.Controls.ToolTipService.SetToolTip(System.Windows.DependencyObject element, object value) + 0x31 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCell.PrepareCellToolTip() + 0xe6 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewRow.PrepareCell(Telerik.Windows.Controls.GridView.GridViewCellBase cellBase, Telerik.Windows.Controls.GridViewColumn column) + 0x8a bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCellsPanel.PrepareCell(Telerik.Windows.Controls.GridView.GridViewCellBase cell, Telerik.Windows.Controls.GridViewColumn column) + 0xa2 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCellsPanel.GetVirtualizedCell(Telerik.Windows.Controls.GridViewColumn column, bool createIfNull) + 0x98 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCellsPanel.RealizeAndMeasureCells(int startIndex, int predictedLastIndex, System.Func<int,int> calculateNextIndex) + 0xfc bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCellsPanel.UpdateVirtualizedCells() + 0x15e bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewCellsPanel.MeasureOverride(System.Windows.Size availableSize) + 0x10f bytes
System.Windows.dll!System.Windows.FrameworkElement.MeasureOverride(System.IntPtr nativeTarget, float inWidth, float inHeight, out float outWidth, out float outHeight) + 0xa3 bytes
[Managed to Native Transition]
System.Windows.dll!MS.Internal.XcpImports.FrameworkElement_MeasureOverride(System.Windows.FrameworkElement element, System.Windows.Size availableSize) + 0x62 bytes
System.Windows.dll!System.Windows.FrameworkElement.MeasureOverride(System.Windows.Size availableSize) + 0x18 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewRowItem.MeasureOverride(System.Windows.Size constraint) + 0xea bytes
System.Windows.dll!System.Windows.FrameworkElement.MeasureOverride(System.IntPtr nativeTarget, float inWidth, float inHeight, out float outWidth, out float outHeight) + 0xa3 bytes
[Managed to Native Transition]
System.Windows.dll!MS.Internal.XcpImports.UIElement_Measure(System.Windows.UIElement element, System.Windows.Size availableSize) + 0x43 bytes
System.Windows.dll!System.Windows.UIElement.Measure(System.Windows.Size availableSize) + 0x47 bytes
Telerik.Windows.Controls.GridView!Telerik.Windows.Controls.GridView.GridViewVirtualizingPanel.MeasureOverride(System.Windows.Size constraint) + 0x12d1 bytes
System.Windows.dll!System.Windows.FrameworkElement.MeasureOverride(System.IntPtr nativeTarget, float inWidth, float inHeight, out float outWidth, out float outHeight) + 0xa3 bytes
[Appdomain Transition]