I'm using 2011 Q1 Service Pack 1 release.
When MultiSelect is enabled, the rows unexpectedly get selected if (and it happens easily) the mouse gets out of the scrollbar area and into the grid area while scrolling up/down the grid. This is not a standard Windows behavior and is a huge problem for our customers.
We chose Telerik hoping it helps, but every time we try one of the features, we run into problems... really frustrating.
Below is a sample that shows the problem, and the attached image shows how the rows were incorrectly selected while scrolling. I hope there is a workaround for it.
Andy
When MultiSelect is enabled, the rows unexpectedly get selected if (and it happens easily) the mouse gets out of the scrollbar area and into the grid area while scrolling up/down the grid. This is not a standard Windows behavior and is a huge problem for our customers.
We chose Telerik hoping it helps, but every time we try one of the features, we run into problems... really frustrating.
Below is a sample that shows the problem, and the attached image shows how the rows were incorrectly selected while scrolling. I hope there is a workaround for it.
Andy
using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using Telerik.WinControls.UI;namespace RadControllTest{ public partial class Form5 : Form { RadGridView myGrid; MyGridBehavior myGridBehavior; public Form5() { InitializeComponent(); SetupGrid(); } private void SetupGrid() { myGrid = new RadGridView(); myGrid.Dock = DockStyle.Fill; myGrid.AutoSizeColumnsMode = GridViewAutoSizeColumnsMode.Fill; myGrid.MultiSelect = true; GridViewTextBoxColumn nameColumn = new GridViewTextBoxColumn("Name"); myGrid.Columns.Add(nameColumn); myGrid.ViewCellFormatting += new CellFormattingEventHandler(gridView_ViewCellFormatting); myGrid.ChildViewExpanding += new ChildViewExpandingEventHandler(gridView_ChildViewExpanding); myGrid.CurrentRowChanging += new CurrentRowChangingEventHandler(myGrid_CurrentRowChanging); myGridBehavior = new MyGridBehavior(); myGrid.GridBehavior = myGridBehavior; GridViewTemplate childTemplate = new GridViewTemplate(); myGrid.Templates.Add(childTemplate); GridViewDecimalColumn idColumn = new GridViewDecimalColumn("ID"); childTemplate.Columns.Add(idColumn); GridViewTextBoxColumn childNameColumn = new GridViewTextBoxColumn("Name"); childTemplate.Columns.Add(childNameColumn); GridViewRelation relation = new GridViewRelation(myGrid.MasterTemplate, childTemplate); relation.ChildColumnNames.Add("Children"); myGrid.Relations.Add(relation); this.Controls.Add(myGrid); BindingList<MockParent> parents = new BindingList<MockParent>(); for (int i = 0; i < 100; i++) { MockParent p = new MockParent("Parent " + i.ToString()); if ((i % 2) == 0) { BindingList<MockChild> children = new BindingList<MockChild>(); for (int j = 1; j < 5; j++) { children.Add(new MockChild(j, "Child " + j.ToString())); } p.Children = children; } parents.Add(p); } myGrid.DataSource = parents; myGrid.AutoGenerateHierarchy = true; childTemplate.ShowColumnHeaders = false; childTemplate.ShowRowHeaderColumn = false; } void myGrid_CurrentRowChanging(object sender, CurrentRowChangingEventArgs e) { System.Diagnostics.Debug.WriteLine("CurrentRowChanging"); if (myGridBehavior.ExpanderClicked) { System.Diagnostics.Debug.WriteLine("CurrentRowChanging Canceled"); e.Cancel = true; } } void gridView_ChildViewExpanding(object sender, ChildViewExpandingEventArgs e) { if ((e.ParentRow != null) && (e.ParentRow.ChildRows.Count < 1)) { e.Cancel = true; } } void gridView_ViewCellFormatting(object sender, CellFormattingEventArgs e) { GridGroupExpanderCellElement cell = e.CellElement as GridGroupExpanderCellElement; if (cell != null && e.CellElement.RowElement is GridDataRowElement) { if ((cell.RowInfo.ChildRows != null) && (cell.RowInfo.ChildRows.Count > 0)) { cell.Expander.Visibility = Telerik.WinControls.ElementVisibility.Visible; } else { cell.Expander.Visibility = Telerik.WinControls.ElementVisibility.Hidden; } } } private class MyGridBehavior : BaseGridBehavior { public bool ExpanderClicked { get; set; } public override bool OnMouseDown(MouseEventArgs e) { System.Diagnostics.Debug.WriteLine("MouseDown"); ExpanderClicked = false; if (this.CellAtPoint is GridGroupExpanderCellElement) { GridViewRowInfo row = this.CellAtPoint.RowInfo; if ((row != null) && (row.ChildRows.Count > 0)) { ExpanderClicked = true; } } return base.OnMouseDown(e); } public override bool OnMouseUp(MouseEventArgs e) { System.Diagnostics.Debug.WriteLine("MouseUp"); ExpanderClicked = false; return base.OnMouseUp(e); } } private class MockParent { public string Name { get; set; } public BindingList<MockChild> Children { get; set; } public MockParent(string s) { Name = s; } } private class MockChild { public int ID { get; set; } public string Name { get; set; } public MockChild(int id, string s) { ID = id; Name = s; } } }}