This is a migrated thread and some comments may be shown as answers.

WPF datagrid selection problem

3 Answers 199 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Lyjen
Top achievements
Rank 1
Lyjen asked on 08 Feb 2010, 02:17 PM
I have a datagrid which is styled for my requirement. Each datagrid row consists of 7 columns. The datatemplates of each column is as follows.

Column 1 - TextBox
Column 2 - ComboBox
Column 3 - TextBlock
Column 4 - TextBox
Column 5 - TextBox
Column 6 - TextBox
Column 7 - TextBlock

I have  an event handler for the PreviewMouseLeftButtonDown of the datagrid, in which I select or deselect the clicked row using code (toggling selection). I have a button in my application.When this button is pressed, I set the  selection mode of the datagrid to Microsoft.Windows.Controls.DataGridSelectionMode.Extended. Everything works fine until now.

But consider the following scenario.

The selection mode of the datagrid is DataGridSelectionMode.Extended. Now I click on the combobox, its dropdown menu opens, And when I press on the scrollbars of the dropdown of the combobox all the selected items of the datagrid gets deselected. In the callstack it is shown that it occurs due to an event raised from datagrids internal method HandleSelectionForCellInput(Microsoft.Windows.Controls.DataGridCell cell = {Microsoft.Windows.Controls.DataGridCell}, bool startDragging = true, bool allowsExtendSelect = true, bool allowsMinimalSelect = true). What is shown in the call stack is shown below.


PresentationFramework.dll!System.Windows.Controls.SelectionChangedEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes   
     PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes   
     PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes   
     PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.Windows.Controls.DataGrid Items.Count:148}, System.Windows.RoutedEventArgs args = {System.Windows.Controls.SelectionChangedEventArgs}, bool reRaised = false) + 0x1bf bytes   
     PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {Microsoft.Windows.Controls.DataGrid Items.Count:148}, System.Windows.RoutedEventArgs args = {System.Windows.Controls.SelectionChangedEventArgs}) + 0x79 bytes   
     PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs e) + 0x17 bytes   
     PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e) + 0x5 bytes   
     WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.OnSelectionChanged(System.Windows.Controls.SelectionChangedEventArgs e = {System.Windows.Controls.SelectionChangedEventArgs}) + 0x1ef bytes   
     PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.InvokeSelectionChanged(System.Collections.Generic.List<object> unselectedItems, System.Collections.Generic.List<object> selectedItems) + 0x4c bytes   
     PresentationFramework.dll!System.Windows.Controls.Primitives.Selector.SelectionChanger.End() + 0xe1 bytes   
     PresentationFramework.dll!System.Windows.Controls.SelectedItemCollection.EndUpdateSelectedItems() + 0x3b bytes   
     PresentationFramework.dll!System.Windows.Controls.Primitives.MultiSelector.EndUpdateSelectedItems() + 0x30 bytes   
     WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.MakeFullRowSelection(object dataItem = {ePlace.PackageInfo}, bool allowsExtendSelect = true, bool allowsMinimalSelect = true) + 0x85a bytes   
     WPFToolkit.dll!Microsoft.Windows.Controls.DataGrid.HandleSelectionForCellInput(Microsoft.Windows.Controls.DataGridCell cell = {Microsoft.Windows.Controls.DataGridCell}, bool startDragging = true, bool allowsExtendSelect = true, bool allowsMinimalSelect = true) + 0x6b bytes   
     WPFToolkit.dll!Microsoft.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) + 0x155 bytes   
     WPFToolkit.dll!Microsoft.Windows.Controls.DataGridCell.OnAnyMouseLeftButtonDownThunk(object sender = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.Input.MouseButtonEventArgs e = {System.Windows.Input.MouseButtonEventArgs}) + 0x4f bytes   
     PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes   
     PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes   
     PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes   
     PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = true) + 0x1bf bytes   
     PresentationCore.dll!System.Windows.UIElement.ReRaiseEventAs(System.Windows.DependencyObject sender = {Microsoft.Windows.Controls.DataGridCell}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, System.Windows.RoutedEvent newEvent) + 0x10a bytes   
     PresentationCore.dll!System.Windows.UIElement.CrackMouseButtonEventAndReRaiseEvent(System.Windows.DependencyObject sender, System.Windows.Input.MouseButtonEventArgs e) + 0x2e bytes   
     PresentationCore.dll!System.Windows.UIElement.OnMouseDownThunk(object sender, System.Windows.Input.MouseButtonEventArgs e) + 0xde bytes   
     PresentationCore.dll!System.Windows.Input.MouseButtonEventArgs.InvokeEventHandler(System.Delegate genericHandler, object genericTarget) + 0x31 bytes   
     PresentationCore.dll!System.Windows.RoutedEventArgs.InvokeHandler(System.Delegate handler, object target) + 0x27 bytes   
     PresentationCore.dll!System.Windows.RoutedEventHandlerInfo.InvokeHandler(object target, System.Windows.RoutedEventArgs routedEventArgs) + 0x3e bytes   
     PresentationCore.dll!System.Windows.EventRoute.InvokeHandlersImpl(object source = {System.Windows.Controls.TextBlock}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool reRaised = false) + 0x1bf bytes   
     PresentationCore.dll!System.Windows.UIElement.RaiseEventImpl(System.Windows.DependencyObject sender = {System.Windows.Controls.TextBlock}, System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}) + 0x79 bytes   
     PresentationCore.dll!System.Windows.UIElement.RaiseEvent(System.Windows.RoutedEventArgs args = {System.Windows.Input.MouseButtonEventArgs}, bool trusted) + 0x35 bytes   
     PresentationCore.dll!System.Windows.Input.InputManager.ProcessStagingArea() + 0x311 bytes   
     PresentationCore.dll!System.Windows.Input.InputManager.ProcessInput(System.Windows.Input.InputEventArgs input) + 0x42 bytes   
     PresentationCore.dll!System.Windows.Input.InputProviderSite.ReportInput(System.Windows.Input.InputReport inputReport) + 0x62 bytes   
     PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.ReportInput(System.IntPtr hwnd, System.Windows.Input.InputMode mode, int timestamp, System.Windows.Input.RawMouseActions actions, int x, int y, int wheel) + 0x2e2 bytes   
     PresentationCore.dll!System.Windows.Interop.HwndMouseInputProvider.FilterMessage(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0x4e1 bytes   
     PresentationCore.dll!System.Windows.Interop.HwndSource.InputFilterMessage(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0x75 bytes   
     WindowsBase.dll!MS.Win32.HwndWrapper.WndProc(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482, ref bool handled = false) + 0xbe bytes   
     WindowsBase.dll!MS.Win32.HwndSubclass.DispatcherCallbackOperation(object o) + 0x7a bytes   
     WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.InternalRealCall(System.Delegate callback = {Method = {System.Object DispatcherCallbackOperation(System.Object)}}, object args = {MS.Win32.HwndSubclass.DispatcherOperationCallbackParameter}, bool isSingleParameter = true) + 0x8a bytes   
     WindowsBase.dll!System.Windows.Threading.ExceptionWrapper.TryCatchWhen(object source = {System.Windows.Threading.Dispatcher}, System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler = null) + 0x4a bytes   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.WrappedInvoke(System.Delegate callback, object args, bool isSingleParameter, System.Delegate catchHandler) + 0x44 bytes   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.InvokeImpl(System.Windows.Threading.DispatcherPriority priority, System.TimeSpan timeout, System.Delegate method, object args, bool isSingleParameter) + 0x91 bytes   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority priority, System.Delegate method, object arg) + 0x40 bytes   
     WindowsBase.dll!MS.Win32.HwndSubclass.SubclassWndProc(System.IntPtr hwnd = 2819506, int msg = 513, System.IntPtr wParam = 1, System.IntPtr lParam = 45155482) + 0xdc bytes   
     [Native to Managed Transition]   
     [Managed to Native Transition]   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrameImpl(System.Windows.Threading.DispatcherFrame frame = {System.Windows.Threading.DispatcherFrame}) + 0xc7 bytes   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.PushFrame(System.Windows.Threading.DispatcherFrame frame) + 0x49 bytes   
     WindowsBase.dll!System.Windows.Threading.Dispatcher.Run() + 0x4c bytes   
     PresentationFramework.dll!System.Windows.Application.RunDispatcher(object ignore) + 0x1e bytes   
     PresentationFramework.dll!System.Windows.Application.RunInternal(System.Windows.Window window) + 0x6f bytes   
     PresentationFramework.dll!System.Windows.Application.Run(System.Windows.Window window) + 0x26 bytes   
     PresentationFramework.dll!System.Windows.Application.Run() + 0x19 bytes   
     ePlace.exe!ePlace.App.Main() + 0x5e bytes    C#
     [Native to Managed Transition]   
     [Managed to Native Transition]   
     mscorlib.dll!System.AppDomain.ExecuteAssembly(string assemblyFile, System.Security.Policy.Evidence assemblySecurity, string[] args) + 0x3a bytes   
     Microsoft.VisualStudio.HostingProcess.Utilities.dll!Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly() + 0x2b bytes   
     mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(object state) + 0x66 bytes   
     mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext, System.Threading.ContextCallback callback, object state) + 0x6f bytes   
     mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() + 0x44 bytes   




Now I would like to avoid this internal call for selection from datagrid. Is there any way to do that? Please advise.

3 Answers, 1 is accepted

Sort by
0
Vlad
Telerik team
answered on 08 Feb 2010, 02:33 PM
Hello,

This seems to be the WPF Toolkit grid? Can you explain how this is related to RadGridView?

Greetings,
Vlad
the Telerik team

Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Follow the status of features or bugs in PITS and vote for them to affect their priority.
0
Lyjen
Top achievements
Rank 1
answered on 08 Feb 2010, 02:41 PM
Sorry  If I have posted this on wrong forum...... This is wpf toolkit datagrid itself. I don't know whether this is related to RadGridView in any way.
0
Milan
Telerik team
answered on 08 Feb 2010, 03:33 PM
Hello Lyjen,

You could try searching for an answer on StackOverflow. You should be able to find quite a few topic related to the WPF Toolkit DataGrid there. 

Greetings,
Milan
the Telerik team

Watch a video on how to optimize your support resource searches and check out more tips on the blogs.
Follow the status of features or bugs in PITS and vote for them to affect their priority.
Tags
GridView
Asked by
Lyjen
Top achievements
Rank 1
Answers by
Vlad
Telerik team
Lyjen
Top achievements
Rank 1
Milan
Telerik team
Share this question
or